adipro
One import for the whole toolbox.
import adipro as ap
df = ap.pd.read_csv("rows.csv")
soup = ap.BeautifulSoup(ap.requests.get(url).text, "lxml")
doc = ap.Document()
ap.load_dotenv()
No import block at the top of every script, and one pip install on a new
machine instead of forty.
Install
pip install adipro
That installs everything — all 50 packages, every group below. On a machine where you only need a slice of it:
pip install adipro[scraping] # bs4, lxml, cloudscraper, curl_cffi, ddgs, ...
pip install adipro[llm] # openai, groq, anthropic, langgraph, tiktoken, ...
pip install adipro[docs] # python-docx, python-pptx, openpyxl, pdf
pip install adipro[browser] # playwright, selenium
pip install adipro[media] # gTTS, edge-tts, pillow, lameenc
pip install adipro[data] # gspread, pyodbc
pip install adipro[cloud] # boto3
pip install adipro[app] # fastapi, streamlit, gradio, pydantic, ...
Development install:
git clone <this repo> && cd adipro
pip install -e ".[dev]"
pytest
Nothing loads until you touch it
import adipro takes about 4 ms whether you have 5 packages installed or 50.
Aliases resolve on first attribute access and are cached afterwards, so
ap.pd imports pandas once and every later ap.pd is a dict lookup.
Two things follow from that:
-
A missing package only breaks the line that needs it. If
playwrightfailed to build on this machine,ap.pdstill works fine. -
You get told how to fix it, not a bare traceback:
MissingPackage: adipro.sync_playwright needs 'playwright', which is not installed. pip install adipro[browser] # the whole browser group pip install playwright # just this one
Finding things
ap.search("pdf") # {'PdfReader': 'pypdf:PdfReader', 'open_pdf': ..., ...}
ap.doctor() # what is installed, what is missing, how to fix it
ap.loaded() # aliases resolved so far this process
dir(ap) # every alias — tab-completion works in Jupyter
From the shell:
python -m adipro # health report
python -m adipro pdf # search aliases
Import styles
| Style | Lazy? | Use it? |
|---|---|---|
import adipro as ap then ap.pd |
yes | preferred |
from adipro import pd, requests |
yes | fine |
from adipro import * |
no | stdlib + core only, on purpose |
from adipro import * is deliberately limited to the stdlib and core aliases —
the ones a base install guarantees are present. Star-importing the heavy groups
would have to load all of them eagerly and would die if any single one were
missing, so __all__ leaves them out. Reach for them through ap..
What is in it
| Group | Packages |
|---|---|
stdlib |
Path, json, re, os, dt, defaultdict, dataclass, ThreadPoolExecutor, sha256, urljoin, … — no install needed |
core |
pandas, numpy, requests, httpx, python-dotenv, rich, tqdm |
scraping |
beautifulsoup4, lxml, cloudscraper, curl_cffi, ddgs, feedparser, readability-lxml, ftfy, dateparser, rapidfuzz, pycryptodome |
browser |
playwright, selenium |
llm |
openai, groq, anthropic, google-generativeai, langgraph, langchain-google-genai, langchain-groq, langchain-text-splitters, tiktoken |
docs |
python-docx, python-pptx, openpyxl, pdfplumber, pypdf |
data |
gspread, pyodbc |
media |
gTTS, edge-tts, pillow, lameenc |
cloud |
boto3 |
app |
fastapi, uvicorn, pydantic, streamlit, gradio, schedule, aiohttp, nest-asyncio |
Run python -m adipro for the live list with install status.
Adding a package
Two edits, in this order:
- Add it to the right group in
src/adipro/_registry.py— its import root and pip name underpackages, and the aliases you want underaliases. - Add the pip name to that extra and to
dependenciesandallinpyproject.toml.
tests/test_adipro.py::test_registry_matches_pyproject fails if you do one and
forget the other, and test_every_installed_alias_resolves fails if an alias
points at a module path or attribute that does not exist.
Notes
- Versions are loose on purpose. Only a few floors are pinned. Hard pins here would fight the pins in projects you install alongside this, so installing adipro will not drag your other venvs sideways.
google-generativeaiis end-of-life upstream. It still works and is still in thellmgroup because it is what is installed, but Google has stopped updating it in favour ofgoogle-genai(from google import genai). Worth migrating when convenient; the alias isap.genai.- Two aliases are renamed to avoid a clash. readability-lxml's
Documentisap.ReadabilityDoc, because python-docx already ownsap.Document.
Licence
MIT
Metadata
Release files for adipro 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| adipro-0.1.0.tar.gz | 18.5 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| adipro-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 31.4 kB
Release files / adipro-0.1.0.tar.gz
| Download URL | adipro-0.1.0.tar.gz |
|---|---|
| Size | 18.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
7cc2c4cc9090b6ee0cdae06bfb94815cb650ed02fbef1e684f12ad72a1977ce5
|
|
BLAKE2b-256 checksum How to use checksums |
58d65e886dacb2f54483dbe7c3d0a1b5768f9de425ee6f8b1d097b285c3380a4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.6
|
Release files / adipro-0.1.0-py3-none-any.whl
| Download URL | adipro-0.1.0-py3-none-any.whl |
|---|---|
| Size | 12.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
943fc4e7279afa0014323e5605cc9092d7d55fc3b3bf499e8ec487fc95c93732
|
|
BLAKE2b-256 checksum How to use checksums |
8d04bb7b58c6e36dfe4221bef71b5a67380eb60d156e93b6a72333c40d02f599
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.6
|
Security for adipro 0.1.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.