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

Top 120 - 240

tomlkit ✗ langchain ✓ opentelemetry-instrumentation ✓ mcp ✓ editables ✗ oauthlib ✗ sse-starlette ✓ proto-plus ✓ opentelemetry-exporter-otlp-proto-common ✓ pyopenssl ✗ distlib ✗ dnspython ✓ google-genai ✓ wcwidth ✗ networkx ✓ requests-toolbelt ✗ opentelemetry-exporter-otlp-proto-grpc ✓ python-discovery ✗ pytest-json-ctrf ✓ coverage ✓ rsa ✗ gitpython ✗ msgpack ✓ docstring-parser ✗ smmap ✗ ruff ✗ grpcio-tools ✓ keyring ✓ mypy-extensions ✗ psycopg2-binary ✗ sortedcontainers ✓ fonttools ✓ sglang ✓ werkzeug ✓ hf-xet ✗ matplotlib ✓ google-cloud-storage ✓ jaraco-classes ✓ tabulate ✓ jeepney ✓ secretstorage ✓ redis ✓ weaviate-client ✓ decorator ✗ azure-identity ✗ email-validator ✗ jaraco-functools ✓ multiprocess ✗ prompt-toolkit ✗ jaraco-context ✓ azure-core ✓ pynacl ✗ gitdb ✗ kiwisolver ✓ defusedxml ✗ ydb ✗ websocket-client ✗ pytest-asyncio ✓ docutils ✗ httpx-sse ✗ tiktoken ✓ tokenizers ✓ scikit-learn ✓ isodate ✗ contourpy ✓ httptools ✓ tzlocal ✓ dill ✗ itsdangerous ✓ uvloop ✗ pytest-cov ✗ flask ✓ msal ✗ orjson ✓ alembic ✓ bcrypt ✗ opentelemetry-instrumentation-requests ✓ google-cloud-core ✓ google-api-python-client ✗ joblib ✗ opentelemetry-util-http ✓ snowflake-connector-python ✓ rapidfuzz ✓ transformers ✓ browser-use ✓ threadpoolctl ✗ httplib2 ✓ ruamel-yaml ✗ uritemplate ✓ chardet ✓ ptyprocess ✓ google-auth-httplib2 ✓ google-auth-oauthlib ✓ blinker ✓ pexpect ✓ google-resumable-media ✓ cycler ✗ google-cloud-batch ✓ docker ✗ async-timeout ✓ opentelemetry-exporter-otlp ✓ google-cloud-secret-manager ✓ mako ✗ google-crc32c ✓ langchain-core ✓ pydantic-ai-slim ✓ xxhash ✗ nodeenv ✗ joserfc ✓ google-cloud-bigquery ✓ deprecated ✗ zstandard ✗ authlib ✓ asn1crypto ✗ hpack ✓ ipython ✓ google-analytics-admin ✓ uv ✗ anthropic ✗ google-cloud-kms ✓

Top 240 - 360

aiofiles ✗ prometheus-client ✗ pytest-xdist ✗ toml ✗ identify ✓ pre-commit ✓ google-cloud-compute ✓ sympy ✗ lmnr ✓ h2 ✗ cfgv ✓ hyperframe ✗ execnet ✗ pyproject-hooks ✓ gcsfs ✓ mpmath ✗ backoff ✗ cloudpickle ✗ jsonpointer ✓ mypy ✓ paramiko ✗ traitlets ✓ poetry-core ✓ datasets ✓ msal-extensions ✗ fastjsonschema ✗ google-cloud-dlp ✓ google-cloud-aiplatform ✓ build ✓ black ✓ sqlparse ✗ sentry-sdk ✗ google-cloud-texttospeech ✓ asgiref ✗ executing ✗ databricks-sdk ✓ narwhals ✓ jedi ✓ webencodings ✓ azure-storage-blob ✗ parso ✗ google-cloud-speech ✓ babel ✗ pyperclip ✗ opentelemetry-instrumentation-threading ✓ matplotlib-inline ✗ pandas-stubs ✓ asttokens ✗ databricks-sql-connector ✗ grpc-google-iam-v1 ✗ gunicorn ✓ jsonschema-path ✓ pymupdf ✓ jsonpatch ✗ python-json-logger ✓ setuptools-scm ✗ tornado ✗ google-cloud-pubsub ✓ marshmallow ✓ stack-data ✗ python-docx ✗ pure-eval ✗ beartype ✓ griffelib ✓ cython ✗ cyclopts ✓ pathable ✓ cachecontrol ✓ xmltodict ✗ pydantic-graph ✓ dbt-adapters ✓ jsonref ✓ rich-rst ✗ pypdf ✗ pymongo ✗ py4j ✗ vcs-versioning ✗ types-requests ✓ termcolor ✓ py-key-value-aio ✓ xlsxwriter ✗ flatbuffers ✓ dbt-core ✓ librt ✗ snowflake-snowpark-python ✓ google-cloud-tasks ✓ kubernetes ✓ markdown ✓ fastmcp ✓ isort ✓ tinycss2 ✓ aioitertools ✓ google-cloud-monitoring ✓ mdit-py-plugins ✗ typedload ✓ watchdog ✗ langsmith ✓ google-cloud-logging ✓ asyncpg ✗ opentelemetry-exporter-prometheus ✓ llama-parse ✓ importlib-resources ✓ structlog ✓ lz4 ✗ llama-cloud-services ✓ uncalled-for ✓ fastuuid ✗ onnxruntime ✓ tree-sitter ✓ pyzmq ✗ pytest-mock ✗ aiofile ✓ psycopg ✓ linkify-it-py ✓ debugpy ✗ nest-asyncio ✗ fastmcp-slim ✓ google-cloud-bigtable ✓ google-cloud-vision ✓ slack-sdk ✗

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.