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

Top 120 - 240

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

Top 240 - 360

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

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.