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. 228 green packages (63.3%) have dropped support for Python 3.9;
  2. 132 uncolored packages (36.7%) 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 ✗ certifi ✗ urllib3 ✓ idna ✗ requests ✓ charset-normalizer ✗ setuptools ✓ cryptography ✗ botocore ✓ cffi ✓ pluggy ✗ pygments ✗ pyyaml ✗ numpy ✓ aiobotocore ✓ python-dateutil ✗ six ✓ pydantic ✗ click ✓ pytest ✓ anyio ✓ pycparser ✓ pydantic-core ✓ iniconfig ✓ annotated-types ✓ attrs ✗ h11 ✗ fsspec ✓ protobuf ✓ s3transfer ✓ httpx ✗ httpcore ✗ typing-inspection ✗ grpcio-status ✓ pandas ✓ markupsafe ✓ python-dotenv ✓ platformdirs ✓ pip ✓ litellm ✓ pathspec ✗ jinja2 ✓ filelock ✓ s3fs ✓ tqdm ✗ pyjwt ✗ aiohttp ✓ uvicorn ✓ yarl ✓ rpds-py ✓ starlette ✓ rich ✗ markdown-it-py ✓ jsonschema ✓ multidict ✗ propcache ✓ sglang ✓ jmespath ✗ fastapi ✓ aiohappyeyeballs ✓ ghapi ✓ frozenlist ✗ websockets ✓ referencing ✓ virtualenv ✗ aiosignal ✓ jsonschema-specifications ✗ mdurl ✗ wheel ✗ textual ✗ pytz ✗ google-auth ✓ pillow ✓ pyasn1 ✗ trove-classifiers ✓ importlib-metadata ✓ opentelemetry-semantic-conventions ✓ huggingface-hub ✓ zipp ✓ annotated-doc ✗ sniffio ✓ tzdata ✓ googleapis-common-protos ✓ opentelemetry-api ✓ opentelemetry-sdk ✓ hatchling ✓ soupsieve ✓ wrapt ✗ regex ✓ beautifulsoup4 ✓ tenacity ✓ greenlet ✓ pyarrow ✓ google-api-core ✓ openai ✓ pydantic-settings ✓ distro ✗ pyasn1-modules ✗ python-multipart ✓ jiter ✗ grpcio ✓ scipy ✓ watchfiles ✓ multiprocess ✗ pyparsing ✗ sqlalchemy ✗ opentelemetry-proto ✓ lxml ✗ colorama ✗ opentelemetry-instrumentation ✓ tomli ✓ opentelemetry-exporter-otlp-proto-http ✓ psutil ✓ typer ✓ shellingham ✗ exceptiongroup ✓ editables ✗ mcp ✓

Top 120 - 240

requests-oauthlib ✗ opentelemetry-exporter-otlp-proto-common ✓ proto-plus ✓ dnspython ✓ distlib ✗ openpyxl ✗ et-xmlfile ✗ cachetools ✓ python-discovery ✗ more-itertools ✓ oauthlib ✗ hf-xet ✗ sse-starlette ✓ coverage ✓ opentelemetry-exporter-otlp-proto-grpc ✓ tomlkit ✗ wcwidth ✗ ruff ✗ gitpython ✗ mypy-extensions ✗ pytest-asyncio ✓ docstring-parser ✗ smmap ✗ networkx ✓ tiktoken ✓ google-genai ✓ msgpack ✓ requests-toolbelt ✗ rsa ✗ tokenizers ✓ fonttools ✓ pyopenssl ✗ redis ✓ psycopg2-binary ✗ langchain ✓ uvloop ✗ matplotlib ✓ grpcio-tools ✓ prompt-toolkit ✓ sortedcontainers ✓ httptools ✓ gitdb ✗ email-validator ✗ dill ✗ werkzeug ✓ opentelemetry-instrumentation-requests ✓ defusedxml ✗ google-cloud-storage ✓ chardet ✓ pytest-json-ctrf ✓ tabulate ✓ contourpy ✓ keyring ✓ pytest-cov ✗ nodeenv ✗ pynacl ✗ kiwisolver ✓ h2 ✓ azure-identity ✗ jaraco-functools ✓ azure-core ✓ jaraco-classes ✓ ptyprocess ✓ isodate ✗ jeepney ✓ hpack ✓ awscli ✓ scikit-learn ✓ pexpect ✓ orjson ✓ secretstorage ✓ toml ✗ alembic ✓ tzlocal ✓ websocket-client ✗ pre-commit ✓ docker ✗ hyperframe ✗ httpx-sse ✗ opentelemetry-util-http ✓ identify ✓ xxhash ✗ jaraco-context ✓ cfgv ✓ mako ✓ docutils ✗ bcrypt ✗ decorator ✗ joblib ✗ itsdangerous ✓ msal ✗ mypy ✓ ydb ✓ google-cloud-core ✓ opentelemetry-instrumentation-threading ✓ threadpoolctl ✗ opentelemetry-exporter-otlp ✓ uv ✗ cycler ✗ flask ✓ ruamel-yaml ✗ anthropic ✗ transformers ✓ datasets ✓ ipython ✓ async-timeout ✓ rapidfuzz ✓ google-resumable-media ✓ google-crc32c ✓ google-api-python-client ✗ blinker ✓ pytest-xdist ✗ zstandard ✗ snowflake-connector-python ✓ sentry-sdk ✗ execnet ✗ black ✓ uritemplate ✓ deprecated ✗ prometheus-client ✗

Top 240 - 360

sympy ✗ google-cloud-bigquery ✓ mpmath ✗ httplib2 ✓ traitlets ✓ google-auth-httplib2 ✓ google-cloud-secret-manager ✓ google-auth-oauthlib ✓ langchain-core ✓ backoff ✗ asn1crypto ✗ google-cloud-aiplatform ✓ msal-extensions ✗ jsonpointer ✓ authlib ✓ google-cloud-batch ✓ aiofiles ✗ narwhals ✓ joserfc ✓ pyproject-hooks ✓ weaviate-client ✓ poetry-core ✓ paramiko ✗ librt ✗ executing ✗ fastjsonschema ✓ cloudpickle ✗ jedi ✓ parso ✗ truststore ✓ asttokens ✗ google-cloud-kms ✓ pydantic-ai-slim ✓ pypdf ✗ asgiref ✓ google-analytics-admin ✓ build ✓ sqlparse ✗ gcsfs ✓ google-cloud-compute ✓ matplotlib-inline ✗ webencodings ✓ gunicorn ✓ stack-data ✗ azure-storage-blob ✗ pure-eval ✗ psycopg ✓ databricks-sdk ✓ cfn-lint ✓ isort ✓ babel ✗ pytest-timeout ✗ jsonpatch ✗ grpc-google-iam-v1 ✓ fastuuid ✗ cython ✗ setuptools-scm ✗ psycopg-binary ✓ google-cloud-dlp ✓ markdown ✓ termcolor ✓ mdit-py-plugins ✗ httpx2 ✓ cachecontrol ✓ cbor2 ✓ google-cloud-texttospeech ✓ xmltodict ✗ langsmith ✓ httpcore2 ✓ linkify-it-py ✓ marshmallow ✓ google-cloud-speech ✓ google-cloud-pubsub ✓ vcs-versioning ✗ asyncpg ✗ types-requests ✓ uc-micro-py ✓ pydantic-graph ✓ flatbuffers ✓ python-docx ✗ dbt-adapters ✓ types-toml ✓ python-json-logger ✓ tornado ✗ safetensors ✓ pymupdf ✓ fastmcp ✓ structlog ✓ cyclopts ✓ pyperclip ✗ watchdog ✗ pymongo ✗ types-certifi ✓ griffelib ✓ kubernetes ✓ grpclib ✓ pytokens ✗ tinycss2 ✓ beartype ✓ py4j ✗ modal ✓ pytest-mock ✗ xlsxwriter ✗ jsonschema-path ✓ synchronicity ✓ aioitertools ✓ opentelemetry-exporter-prometheus ✓ playwright ✓ onnxruntime ✓ lz4 ✗ fastmcp-slim ✓ google-cloud-logging ✓ pyzmq ✗ jsonref ✓ py-key-value-aio ✓ dbt-core ✓ pathable ✓ google-cloud-tasks ✓ tomli-w ✓ tree-sitter ✓

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.