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

Top 120 - 240

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

Top 240 - 360

xmltodict ✗ jsonpointer ✓ ipython ✓ cython ✗ sentry-sdk ✗ google-cloud-secret-manager ✗ black ✓ tornado ✗ gunicorn ✓ httpx-sse ✗ cloudpickle ✗ databricks-sdk ✗ aiofiles ✗ asgiref ✗ pydantic-ai-slim ✓ opentelemetry-util-http ✗ opentelemetry-instrumentation-requests ✗ pre-commit ✓ identify ✓ parso ✗ traitlets ✓ executing ✗ importlib-resources ✓ google-cloud-batch ✗ py4j ✗ jedi ✗ pytest-xdist ✗ grpc-google-iam-v1 ✗ cfgv ✓ asttokens ✗ durationpy ✓ jsonschema-path ✓ execnet ✗ google-analytics-admin ✗ cachecontrol ✓ python-json-logger ✗ markdown ✓ matplotlib-inline ✗ gcsfs ✓ langchain-core ✓ flatbuffers ✓ webencodings ✓ xxhash ✗ nest-asyncio ✗ typing-inspect ✗ multiprocess ✗ stack-data ✗ pure-eval ✗ jsonpatch ✗ watchdog ✗ pathable ✓ h2 ✗ grpcio-health-checking ✗ litellm ✗ hyperframe ✗ hpack ✗ dbt-core ✓ pymongo ✗ pydantic-graph ✓ termcolor ✓ pytest-mock ✗ isort ✓ dulwich ✓ pyperclip ✗ pkginfo ✗ pandas-stubs ✓ anthropic ✗ debugpy ✗ pymupdf ✓ aioitertools ✓ onnxruntime ✓ awswrangler ✓ torch ✓ jsonpath-ng ✓ pymysql ✓ cyclopts ✓ dataclasses-json ✗ dbt-adapters ✓ aliyun-python-sdk-core ✗ beartype ✓ poetry ✓ jsonref ✓ slack-sdk ✗ pytest-json-ctrf ✓ pyzmq ✗ cattrs ✓ pycryptodome ✗ mccabe ✗ fastmcp ✓ lz4 ✗ pygithub ✗ msrest ✗ ruamel-yaml-clib ✗ tree-sitter ✓ installer ✓ rich-toolkit ✓ cleo ✗ dbt-common ✓ langsmith ✓ rich-rst ✗ crashtest ✗ safetensors ✗ sphinx ✓ librt ✗ deepdiff ✗ rfc3339-validator ✓ pendulum ✗ tinycss2 ✓ datasets ✓ narwhals ✗ google-cloud-monitoring ✗ smart-open ✓ zarr ✓ wsproto ✓ semver ✗ loguru ✗ databricks-sql-connector ✗ google-cloud-speech ✗ google-cloud-vision ✗ opentelemetry-exporter-prometheus ✗

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.