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

Top 120 - 240

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

Top 240 - 360

identify ✓ transformers ✓ databricks-sdk ✗ traitlets ✓ pre-commit ✓ sqlparse ✗ parso ✗ cfgv ✓ google-cloud-secret-manager ✗ msal-extensions ✗ xxhash ✗ executing ✗ jedi ✗ fastjsonschema ✗ google-cloud-batch ✗ opentelemetry-instrumentation-requests ✗ gunicorn ✓ asttokens ✗ opentelemetry-util-http ✗ mypy ✓ azure-storage-blob ✗ matplotlib-inline ✗ jsonpointer ✓ h2 ✗ grpc-google-iam-v1 ✗ hyperframe ✗ hpack ✗ google-analytics-admin ✗ babel ✗ aiofiles ✗ termcolor ✓ pure-eval ✗ stack-data ✗ cython ✗ tornado ✗ pytest-xdist ✗ weaviate-client ✓ black ✓ langchain-core ✓ py4j ✗ xmltodict ✗ asgiref ✗ execnet ✗ authlib ✗ importlib-resources ✓ vcs-versioning ✓ markdown ✓ datasets ✓ python-json-logger ✓ sentry-sdk ✗ webencodings ✓ dbt-core ✓ nest-asyncio ✗ anthropic ✗ pandas-stubs ✓ cachecontrol ✓ typing-inspect ✗ grpcio-health-checking ✗ tree-sitter-languages ✓ pymongo ✗ dbt-adapters ✓ jsonpatch ✗ pydantic-graph ✓ pytest-json-ctrf ✓ gcsfs ✓ aioitertools ✓ pymysql ✓ awswrangler ✓ typedload ✓ watchdog ✗ databricks-sql-connector ✗ jsonschema-path ✓ debugpy ✗ google-cloud-compute ✗ torch ✓ google-cloud-kms ✗ jsonpath-ng ✓ pycryptodome ✗ lz4 ✗ pyzmq ✗ dataclasses-json ✗ msrest ✗ pytest-mock ✗ slack-sdk ✗ google-cloud-monitoring ✗ rich-toolkit ✓ dbt-common ✓ google-cloud-speech ✗ dulwich ✓ pyperclip ✗ pkginfo ✗ flatbuffers ✓ google-cloud-dlp ✗ pymupdf ✓ deepdiff ✓ isort ✓ langsmith ✓ pygithub ✗ narwhals ✗ pathable ✓ sphinx ✓ smart-open ✓ google-cloud-tasks ✗ google-cloud-vision ✗ google-cloud-bigtable ✗ pendulum ✗ tinycss2 ✓ notebook ✗ loguru ✗ mccabe ✗ invoke ✗ ruamel-yaml-clib ✗ cattrs ✓ xlsxwriter ✗ poetry ✓ safetensors ✗ librt ✗ google-cloud-videointelligence ✗ google-cloud-language ✗ rfc3339-validator ✓

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.