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

Top 120 - 240

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

Top 240 - 360

mpmath ✗ cfgv ✓ deprecated ✗ asn1crypto ✗ black ✓ rapidfuzz ✓ google-cloud-secret-manager ✓ msal-extensions ✗ jsonpointer ✓ narwhals ✓ async-timeout ✓ awscli ✓ aiofiles ✗ pypdf ✗ webencodings ✓ pytest-xdist ✗ cloudpickle ✗ ipython ✓ paramiko ✗ datasets ✓ pydantic-ai-slim ✓ execnet ✗ librt ✗ sqlparse ✓ authlib ✓ fastjsonschema ✓ google-cloud-batch ✓ grpc-google-iam-v1 ✓ gcsfs ✓ traitlets ✓ pyproject-hooks ✓ databricks-sdk ✓ asgiref ✓ joserfc ✓ psycopg ✓ poetry-core ✓ azure-storage-blob ✗ gunicorn ✓ build ✓ google-cloud-aiplatform ✓ isort ✓ jsonpatch ✗ google-cloud-kms ✓ babel ✗ google-analytics-admin ✓ psycopg-binary ✓ sglang ✓ google-cloud-compute ✓ executing ✗ setuptools-scm ✗ parso ✗ jedi ✓ pydantic-graph ✓ cython ✗ langsmith ✓ markdown ✓ asttokens ✗ cachecontrol ✓ asyncpg ✗ vcs-versioning ✗ xmltodict ✗ marshmallow ✓ google-cloud-dlp ✓ tornado ✗ matplotlib-inline ✗ python-json-logger ✓ watchdog ✗ google-cloud-speech ✓ safetensors ✓ google-cloud-pubsub ✓ python-docx ✗ google-cloud-texttospeech ✓ stack-data ✗ pure-eval ✗ playwright ✓ structlog ✓ dbt-adapters ✓ tinycss2 ✓ fastuuid ✗ pymupdf ✓ kubernetes ✓ pytokens ✗ google-cloud-logging ✓ lz4 ✗ aioitertools ✓ pyee ✓ pymongo ✗ py4j ✗ tree-sitter ✓ pymysql ✓ fastmcp ✓ termcolor ✓ flatbuffers ✓ weaviate-client ✓ xlsxwriter ✗ mdit-py-plugins ✗ nest-asyncio ✗ pytest-timeout ✗ croniter ✗ pyzmq ✓ brotli ✓ dbt-core ✓ google-cloud-monitoring ✓ griffelib ✓ tomli-w ✓ slack-sdk ✗ google-cloud-tasks ✓ linkify-it-py ✓ pyperclip ✗ opentelemetry-instrumentation-fastapi ✓ pytest-mock ✗ opentelemetry-exporter-prometheus ✓ pycryptodome ✗ debugpy ✗ torch ✓ loguru ✗ uc-micro-py ✓ importlib-resources ✓ fastmcp-slim ✓ reportlab ✓

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.