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

Top 120 - 240

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

Top 240 - 360

asgiref ✓ google-auth-oauthlib ✓ opentelemetry-exporter-otlp-proto-grpc ✓ narwhals ✓ azure-identity ✗ rapidfuzz ✓ async-timeout ✓ fastjsonschema ✓ asyncpg ✗ msal-extensions ✗ authlib ✓ sqlparse ✓ opentelemetry-util-http ✓ executing ✗ black ✓ xlsxwriter ✗ playwright ✓ paramiko ✗ typedload ✓ snowflake-connector-python ✓ tornado ✗ babel ✗ transformers ✓ joserfc ✓ jsonpatch ✗ ipython ✓ parso ✗ python-docx ✗ jedi ✓ asttokens ✗ grpc-google-iam-v1 ✓ gunicorn ✓ tinycss2 ✓ pyee ✓ azure-storage-blob ✓ matplotlib-inline ✗ markdown ✓ structlog ✓ pure-eval ✗ pyzmq ✓ pyproject-hooks ✓ google-cloud-aiplatform ✓ xmltodict ✗ stack-data ✗ litellm ✓ python-json-logger ✓ awswrangler ✓ aioitertools ✓ isort ✓ pytest-timeout ✗ build ✓ mcp-types ✓ watchdog ✗ awscli ✓ brotli ✓ cachecontrol ✓ nbformat ✓ marshmallow ✓ databricks-sdk ✓ nest-asyncio ✗ ast-serialize ✗ pymupdf ✓ jupyter-core ✓ pytest-mock ✓ safetensors ✓ flatbuffers ✓ griffelib ✓ lz4 ✗ debugpy ✓ croniter ✗ setuptools-scm ✗ jupyter-client ✓ multiprocess ✗ types-pyyaml ✓ pymysql ✓ onnxruntime ✓ poetry-core ✓ langsmith ✓ tomli-w ✓ pytokens ✗ slack-sdk ✗ kubernetes ✓ cython ✗ sqlglot ✓ types-requests ✓ jsonref ✓ beartype ✓ vcs-versioning ✗ cyclopts ✓ pyperclip ✗ termcolor ✓ python-pptx ✗ lark ✓ py4j ✗ opentelemetry-instrumentation-fastapi ✓ rich-rst ✗ uuid-utils ✓ loguru ✗ text-unidecode ✓ python-slugify ✓ xlrd ✗ faker ✓ cbor2 ✓ pathable ✓ opentelemetry-instrumentation-asgi ✓ mistune ✗ jsonschema-path ✓ pycryptodome ✗ bleach ✓ aiosqlite ✓ deprecation ✓ pymongo ✗ fastuuid ✗ argon2-cffi-bindings ✓ pypdfium2 ✓ semver ✓ reportlab ✓ py-key-value-aio ✓ opentelemetry-instrumentation-requests ✓ scramp ✓

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.