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

Top 120 - 240

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

Top 240 - 360

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

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.