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. 153 green packages (42.5%) have dropped support for Python 3.9;
  2. 207 uncolored packages (57.5%) 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 ✗ setuptools ✓ urllib3 ✗ certifi ✗ charset-normalizer ✗ typing-extensions ✗ requests ✓ idna ✗ botocore ✗ aiobotocore ✗ cryptography ✗ python-dateutil ✗ six ✓ numpy ✓ cffi ✗ pyyaml ✗ grpcio-status ✗ pycparser ✓ pluggy ✗ s3transfer ✗ pygments ✗ pydantic ✗ attrs ✗ click ✓ protobuf ✓ fsspec ✓ pydantic-core ✗ anyio ✓ pandas ✓ pytest ✓ h11 ✗ platformdirs ✓ iniconfig ✓ markupsafe ✓ wheel ✗ annotated-types ✗ s3fs ✓ pip ✗ importlib-metadata ✓ jinja2 ✓ pyjwt ✗ pathspec ✗ jmespath ✗ python-dotenv ✓ httpx ✗ filelock ✓ typing-inspection ✗ httpcore ✗ zipp ✓ pytz ✗ rich ✗ uvicorn ✓ jsonschema ✓ pyasn1 ✗ yarl ✓ multidict ✗ starlette ✓ aiohttp ✗ google-auth ✗ tqdm ✗ markdown-it-py ✓ virtualenv ✗ trove-classifiers ✓ tzdata ✓ tomli ✓ google-api-core ✗ mdurl ✗ pillow ✓ awscli ✗ fastapi ✓ googleapis-common-protos ✗ colorama ✗ propcache ✗ frozenlist ✗ rpds-py ✓ referencing ✓ scipy ✓ opentelemetry-api ✗ aiosignal ✓ jsonschema-specifications ✗ pyasn1-modules ✗ annotated-doc ✗ pyarrow ✓ greenlet ✓ wrapt ✗ requests-oauthlib ✗ sqlalchemy ✗ pyparsing ✗ tenacity ✓ aiohappyeyeballs ✗ hatchling ✓ grpcio ✗ regex ✓ cachetools ✓ soupsieve ✗ psutil ✓ opentelemetry-semantic-conventions ✗ rsa ✗ oauthlib ✗ websockets ✓ exceptiongroup ✓ more-itertools ✗ typer ✓ sniffio ✓ shellingham ✗ opentelemetry-sdk ✗ docutils ✗ beautifulsoup4 ✓ lxml ✗ networkx ✓ tomlkit ✗ openpyxl ✗ et-xmlfile ✗ distlib ✗ pydantic-settings ✓ requests-toolbelt ✗ python-multipart ✓ dnspython ✓ grpcio-tools ✓

Top 120 - 240

websocket-client ✗ google-genai ✓ coverage ✓ tabulate ✓ werkzeug ✓ pyopenssl ✗ langchain ✓ proto-plus ✗ opentelemetry-proto ✗ smmap ✗ mypy-extensions ✗ keyring ✓ huggingface-hub ✗ openai ✗ msgpack ✓ google-cloud-storage ✓ distro ✗ jaraco-classes ✓ psycopg2-binary ✗ watchfiles ✗ secretstorage ✓ jeepney ✓ sortedcontainers ✓ flask ✓ pynacl ✗ wcwidth ✗ sentry-sdk ✗ fonttools ✓ decorator ✗ scikit-learn ✓ jaraco-context ✓ matplotlib ✓ joblib ✗ opentelemetry-exporter-otlp-proto-http ✗ redis ✓ jaraco-functools ✓ isodate ✗ sse-starlette ✓ mcp ✓ kiwisolver ✓ jiter ✗ gitpython ✗ pexpect ✓ email-validator ✗ opentelemetry-exporter-otlp-proto-grpc ✗ azure-core ✗ ptyprocess ✓ python-discovery ✗ opentelemetry-exporter-otlp-proto-common ✗ ruff ✗ sympy ✗ bcrypt ✗ threadpoolctl ✗ pytest-cov ✗ editables ✗ poetry-core ✓ mpmath ✗ alembic ✓ contourpy ✓ itsdangerous ✓ azure-identity ✗ zstandard ✗ async-timeout ✓ prompt-toolkit ✗ msal ✗ ruamel-yaml ✗ google-cloud-core ✗ docstring-parser ✗ orjson ✓ snowflake-connector-python ✗ pytest-asyncio ✓ gitdb ✗ opentelemetry-instrumentation ✗ cycler ✗ blinker ✓ defusedxml ✗ tzlocal ✗ docker ✗ rapidfuzz ✓ types-requests ✓ deprecated ✗ google-crc32c ✓ chardet ✓ google-resumable-media ✗ zarr ✓ dill ✗ tokenizers ✗ transformers ✓ pyproject-hooks ✓ asn1crypto ✗ kubernetes ✗ hf-xet ✗ mako ✗ google-api-python-client ✗ fastjsonschema ✗ setuptools-scm ✓ build ✗ google-cloud-aiplatform ✗ paramiko ✗ backoff ✗ authlib ✗ prometheus-client ✗ google-auth-oauthlib ✗ uv ✗ toml ✗ marshmallow ✓ textual ✗ sqlparse ✗ uritemplate ✓ ipython ✓ google-auth-httplib2 ✗ opentelemetry-exporter-otlp ✗ cython ✗ uvloop ✗ nodeenv ✗ multiprocess ✗ httplib2 ✓ tiktoken ✓ google-cloud-bigquery ✗ jsonpointer ✓

Top 240 - 360

mypy ✗ msal-extensions ✗ tornado ✗ babel ✗ azure-storage-blob ✗ databricks-sdk ✗ pre-commit ✓ cloudpickle ✗ parso ✗ traitlets ✓ flatbuffers ✓ identify ✓ asgiref ✗ httpx-sse ✗ executing ✗ jsonschema-path ✓ gunicorn ✓ jedi ✗ httptools ✓ xmltodict ✗ cfgv ✓ asttokens ✗ aiofiles ✗ black ✓ opentelemetry-instrumentation-requests ✗ pytest-xdist ✗ opentelemetry-util-http ✗ matplotlib-inline ✗ importlib-resources ✓ pathable ✓ yandexcloud ✗ google-cloud-secret-manager ✗ cachecontrol ✓ pyperclip ✗ pymupdf ✓ stack-data ✗ pure-eval ✗ py4j ✗ execnet ✗ xxhash ✗ python-json-logger ✗ onnxruntime ✓ durationpy ✓ markdown ✓ langchain-core ✓ grpc-google-iam-v1 ✗ nest-asyncio ✗ h2 ✗ hyperframe ✗ hpack ✗ webencodings ✓ beartype ✓ jsonref ✓ termcolor ✓ cyclopts ✓ dbt-core ✓ litellm ✗ pytest-mock ✗ dulwich ✓ watchdog ✗ google-cloud-batch ✗ jsonpatch ✗ typing-inspect ✗ pkginfo ✗ fastmcp ✓ debugpy ✗ rich-rst ✗ google-analytics-admin ✗ pymongo ✗ torch ✓ dbt-adapters ✓ aioitertools ✓ grpcio-health-checking ✗ poetry ✓ isort ✓ anthropic ✗ pydantic-ai-slim ✓ tree-sitter ✓ pyzmq ✗ py-key-value-aio ✓ awswrangler ✓ jsonpath-ng ✓ pymysql ✓ cleo ✗ deepdiff ✗ installer ✓ crashtest ✗ pycryptodome ✗ lz4 ✗ mccabe ✗ slack-sdk ✗ ruamel-yaml-clib ✗ typedload ✓ dbt-common ✓ dataclasses-json ✗ msrest ✗ safetensors ✗ pandas-stubs ✓ gcsfs ✓ datasets ✓ pytest-json-ctrf ✓ uncalled-for ✓ xlsxwriter ✗ cattrs ✓ langsmith ✓ wsproto ✓ rfc3339-validator ✓ caio ✓ pygithub ✗ aiofile ✗ backports-tarfile ✓ shapely ✓ jupyter-core ✓ tinycss2 ✓ pendulum ✗ narwhals ✗ pycodestyle ✓ pysocks ✓ ipykernel ✓ arrow ✗

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.