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

Top 120 - 240

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

Top 240 - 360

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

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.