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

Top 120 - 240

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

Top 240 - 360

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

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.