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

Top 120 - 240

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

Top 240 - 360

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

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.