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

Top 120 - 240

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

Top 240 - 360

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

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.