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

Top 120 - 240

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

Top 240 - 360

transformers ✓ mypy ✓ zstandard ✗ anthropic ✗ google-cloud-secret-manager ✓ jsonpointer ✓ executing ✗ build ✓ jedi ✓ fastjsonschema ✗ parso ✗ google-cloud-batch ✓ sympy ✗ pydantic-graph ✓ browser-use ✓ aiofiles ✗ black ✓ paramiko ✗ matplotlib-inline ✗ sentry-sdk ✗ google-cloud-aiplatform ✓ mpmath ✗ asttokens ✗ sqlparse ✗ backoff ✗ authlib ✓ msal-extensions ✗ cloudpickle ✗ pytest-xdist ✗ google-cloud-kms ✗ grpc-google-iam-v1 ✗ stack-data ✗ pure-eval ✗ azure-storage-blob ✗ google-cloud-compute ✓ kubernetes ✓ asgiref ✗ joserfc ✓ narwhals ✓ google-analytics-admin ✓ tree-sitter ✓ gcsfs ✓ webencodings ✓ datasets ✓ termcolor ✓ babel ✗ execnet ✗ gunicorn ✓ marshmallow ✓ python-json-logger ✓ types-requests ✓ cachecontrol ✓ cython ✗ jsonpatch ✗ setuptools-scm ✓ databricks-sdk ✓ google-cloud-dlp ✓ tornado ✗ xmltodict ✗ librt ✗ markdown ✓ pandas-stubs ✓ google-cloud-texttospeech ✗ google-cloud-speech ✓ opentelemetry-instrumentation-threading ✓ pymongo ✗ google-cloud-pubsub ✓ aioitertools ✓ dbt-adapters ✓ mdit-py-plugins ✗ watchdog ✗ databricks-sql-connector ✗ asyncpg ✗ nest-asyncio ✗ tinycss2 ✓ dulwich ✓ importlib-resources ✓ pytest-mock ✗ py4j ✗ isort ✓ linkify-it-py ✓ rich-toolkit ✓ dbt-core ✓ pyperclip ✗ uc-micro-py ✓ pkginfo ✗ structlog ✓ xlsxwriter ✗ types-toml ✓ debugpy ✗ llama-parse ✓ llama-cloud-services ✓ cbor2 ✓ python-docx ✗ flatbuffers ✓ jsonschema-path ✓ pypdf ✗ pyzmq ✗ fastuuid ✗ lz4 ✗ vcs-versioning ✓ cyclopts ✓ langsmith ✓ pytokens ✗ poetry ✓ ghapi ✓ safetensors ✓ beartype ✓ pymupdf ✓ pathable ✓ slack-sdk ✗ snowflake-snowpark-python ✓ ruamel-yaml-clib ✗ typing-inspect ✗ durationpy ✓ google-cloud-tasks ✗ psycopg ✓ torch ✓ google-cloud-monitoring ✓ jsonref ✓

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.