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

Top 120 - 240

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

Top 240 - 360

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

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.