Python 3.9 Readiness

Python 3.9 support graph for the 360 most popular Python packages!

What is this about?

Python 3.9 is a version of Python that is past its End Of Life. This site shows Python 3.9 support for the 360 most downloaded packages on PyPI:

  1. 240 green packages (66.7%) have dropped support for Python 3.9;
  2. 120 uncolored packages (33.3%) still support Python 3.9.

Package 'x' is uncolored. What can I do?

There can be many reasons a package is still supporting Python 3.9:

  • If you are package maintainer, it's time to start dropping support (if you haven't already). Here is an in-depth guide to Dropping support for older Python versions. If you are not able to give the time needed, please seek for help from the community.

  • If you are user of the package, send a friendly note to the package maintainer. Or fork it, and send a pull request to help move the project towards dropping Python 3.9 support.

How do you identify Python 3.9 support?

We look for the Programming Language :: Python :: 3.9 classifier on the latest release of the project, via PyPI's JSON API.

Top 120

boto3 ✓ packaging ✗ certifi ✗ typing-extensions ✗ idna ✗ urllib3 ✓ requests ✓ charset-normalizer ✗ cryptography ✗ pluggy ✓ cffi ✓ python-dateutil ✗ pycparser ✓ pyyaml ✗ setuptools ✓ pygments ✗ botocore ✓ six ✓ pydantic ✓ pydantic-core ✓ click ✓ numpy ✓ anyio ✓ annotated-types ✓ typing-inspection ✓ pytest ✓ h11 ✗ iniconfig ✓ attrs ✗ markupsafe ✓ httpx ✗ httpcore ✗ protobuf ✓ s3transfer ✓ python-dotenv ✓ tzdata ✓ pyjwt ✗ aiobotocore ✓ pandas ✓ starlette ✓ jinja2 ✓ opentelemetry-api ✓ pillow ✓ platformdirs ✓ uvicorn ✓ pathspec ✗ rpds-py ✓ jsonschema ✓ tomlkit ✗ pip ✓ referencing ✓ jmespath ✗ fsspec ✓ jsonschema-specifications ✗ filelock ✓ multidict ✓ markdown-it-py ✓ rich ✗ aiohttp ✓ yarl ✓ mdurl ✗ fastapi ✓ annotated-doc ✗ propcache ✓ websockets ✓ googleapis-common-protos ✓ frozenlist ✗ pytz ✗ pyasn1 ✗ aiosignal ✓ tqdm ✗ sniffio ✓ pydantic-settings ✓ aiohappyeyeballs ✓ python-multipart ✓ wrapt ✗ pyarrow ✓ trove-classifiers ✓ google-auth ✓ lxml ✗ ruff ✗ truststore ✓ jiter ✓ hatchling ✓ tenacity ✓ pyasn1-modules ✗ httpx2 ✓ httpcore2 ✓ sqlalchemy ✓ zipp ✓ greenlet ✓ importlib-metadata ✓ pyparsing ✗ wheel ✗ grpcio-status ✓ grpcio ✓ psutil ✓ openai ✓ scipy ✓ regex ✓ openpyxl ✗ watchfiles ✓ et-xmlfile ✗ google-api-core ✓ soupsieve ✓ distro ✗ coverage ✓ opentelemetry-semantic-conventions ✓ sse-starlette ✓ opentelemetry-sdk ✓ beautifulsoup4 ✓ shellingham ✗ mcp ✓ wcwidth ✗ mypy-extensions ✗ typer ✓ proto-plus ✓ colorama ✗ editables ✗ uvloop ✗

Top 120 - 240

s3fs ✓ requests-oauthlib ✗ docstring-parser ✗ huggingface-hub ✓ pytest-asyncio ✓ httptools ✓ opentelemetry-proto ✓ dnspython ✓ werkzeug ✓ oauthlib ✗ cachetools ✓ tomli ✓ defusedxml ✗ networkx ✓ virtualenv ✗ opentelemetry-exporter-otlp-proto-common ✓ sortedcontainers ✓ fonttools ✓ pytest-cov ✗ more-itertools ✓ psycopg2-binary ✓ itsdangerous ✓ msgpack ✓ distlib ✗ redis ✓ hf-xet ✗ exceptiongroup ✓ alembic ✓ prompt-toolkit ✓ mako ✓ opentelemetry-exporter-otlp-proto-http ✓ requests-toolbelt ✗ orjson ✓ tiktoken ✓ tokenizers ✓ flask ✓ scikit-learn ✓ psycopg ✓ isodate ✗ tabulate ✓ httpx-sse ✗ anthropic ✓ blinker ✓ cloudpickle ✗ rsa ✗ psycopg-binary ✓ pypdf ✗ threadpoolctl ✗ execnet ✗ mypy ✓ pytest-xdist ✗ tzlocal ✓ python-discovery ✗ matplotlib ✓ email-validator ✗ nodeenv ✗ websocket-client ✓ pyopenssl ✗ azure-core ✓ google-cloud-core ✓ ruamel-yaml ✗ zstandard ✗ joblib ✓ h2 ✓ hpack ✓ kiwisolver ✓ xlsxwriter ✗ hyperframe ✗ pynacl ✗ chardet ✓ google-cloud-bigquery ✓ bcrypt ✗ opentelemetry-instrumentation ✓ msal ✗ google-cloud-storage ✓ cycler ✗ contourpy ✓ google-crc32c ✓ google-genai ✓ langchain ✓ prometheus-client ✗ langchain-core ✓ google-resumable-media ✓ jsonpointer ✓ grpcio-tools ✓ dill ✗ librt ✗ xxhash ✗ uv ✗ identify ✓ keyring ✓ asgiref ✓ pre-commit ✓ jaraco-functools ✓ decorator ✗ cfgv ✓ sentry-sdk ✗ sympy ✗ mpmath ✗ jaraco-classes ✓ backoff ✗ docker ✗ jeepney ✓ ptyprocess ✓ secretstorage ✓ docutils ✗ jaraco-context ✓ webencodings ✓ narwhals ✓ uritemplate ✓ deprecated ✓ traitlets ✓ asyncpg ✗ gitpython ✗ azure-identity ✓ pymupdf ✓ asn1crypto ✗ pexpect ✓ toml ✗ google-api-python-client ✓

Top 240 - 360

smmap ✗ opentelemetry-util-http ✓ rapidfuzz ✓ python-docx ✗ aiofiles ✗ gitdb ✗ flatbuffers ✓ msal-extensions ✗ jsonpatch ✓ python-pptx ✗ httplib2 ✓ executing ✗ google-auth-httplib2 ✓ playwright ✓ onnxruntime ✓ babel ✗ fastjsonschema ✓ sqlparse ✓ tornado ✓ google-auth-oauthlib ✓ pyee ✓ authlib ✓ markdown ✓ opentelemetry-exporter-otlp-proto-grpc ✓ gunicorn ✓ pytest-json-ctrf ✓ jedi ✓ pytest-timeout ✗ parso ✗ brotli ✓ tinycss2 ✓ grpc-google-iam-v1 ✓ asttokens ✗ async-timeout ✓ ipython ✓ mcp-types ✓ paramiko ✗ structlog ✓ joserfc ✓ pyzmq ✓ black ✓ matplotlib-inline ✗ snowflake-connector-python ✓ pure-eval ✗ transformers ✓ xmltodict ✗ stack-data ✗ watchdog ✗ azure-storage-blob ✓ ast-serialize ✗ pyproject-hooks ✓ cachecontrol ✓ aioitertools ✓ python-json-logger ✓ pypdfium2 ✓ jupyter-core ✓ build ✓ griffelib ✓ croniter ✗ debugpy ✓ litellm ✓ google-cloud-aiplatform ✓ nest-asyncio ✗ langsmith ✓ nbformat ✓ isort ✓ types-pyyaml ✓ jupyter-client ✓ cython ✗ awscli ✓ pytest-mock ✓ opentelemetry-exporter-otlp-common ✓ lark ✓ uuid-utils ✓ sqlglot ✓ tomli-w ✓ safetensors ✓ marshmallow ✓ slack-sdk ✗ reportlab ✓ databricks-sdk ✓ typedload ✓ lz4 ✗ multiprocess ✗ awswrangler ✓ kubernetes ✓ setuptools-scm ✗ opentelemetry-instrumentation-asgi ✓ pymysql ✓ loguru ✗ xlrd ✗ pycryptodome ✗ argon2-cffi-bindings ✓ beartype ✓ termcolor ✓ opentelemetry-instrumentation-fastapi ✓ argon2-cffi ✗ pytokens ✗ fastuuid ✗ text-unidecode ✓ poetry-core ✓ cyclopts ✓ opentelemetry-exporter-http-transport ✓ rfc3339-validator ✓ types-requests ✓ ipython-pygments-lexers ✓ shapely ✓ python-slugify ✓ vcs-versioning ✗ comm ✓ graphql-core ✓ pdfminer-six ✓ cbor2 ✓ duckdb ✓ invoke ✗ pyperclip ✗ jsonref ✓ opentelemetry-instrumentation-requests ✓ arrow ✗ mistune ✓

Thanks

This is derivative work from py3readiness.org, a site that previously tracked general compatibility with Python 3, which in turn was a derivative of pythonwheels.com, a site that tracks which Python distributions ship the wheel distribution.