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

Top 120 - 240

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

Top 240 - 360

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

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.