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

Top 120 - 240

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

Top 240 - 360

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

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.