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

Top 120 - 240

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

Top 240 - 360

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

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.