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

Top 120 - 240

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

Top 240 - 360

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

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.