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

Top 120 - 240

smmap ✗ requests-toolbelt ✗ tabulate ✓ keyring ✓ watchfiles ✗ openai ✗ websocket-client ✗ mypy-extensions ✗ langchain ✓ werkzeug ✓ opentelemetry-proto ✗ jaraco-classes ✓ huggingface-hub ✗ secretstorage ✓ jeepney ✓ google-genai ✓ msgpack ✓ pyopenssl ✗ google-cloud-storage ✓ sse-starlette ✓ coverage ✓ jaraco-context ✓ scikit-learn ✓ jaraco-functools ✓ distro ✗ mcp ✓ psycopg2-binary ✗ fonttools ✓ pynacl ✗ email-validator ✗ sortedcontainers ✓ opentelemetry-exporter-otlp-proto-http ✗ wcwidth ✗ decorator ✗ matplotlib ✓ sympy ✗ kiwisolver ✓ joblib ✗ mpmath ✗ flask ✓ isodate ✗ jiter ✗ redis ✓ python-discovery ✗ gitpython ✗ docstring-parser ✗ azure-core ✗ pexpect ✓ opentelemetry-exporter-otlp-proto-grpc ✗ azure-identity ✗ ptyprocess ✓ opentelemetry-exporter-otlp-proto-common ✗ threadpoolctl ✗ google-cloud-core ✗ bcrypt ✗ msal ✗ ruff ✗ contourpy ✓ opentelemetry-instrumentation ✗ docker ✗ editables ✗ snowflake-connector-python ✗ alembic ✓ itsdangerous ✓ poetry-core ✓ gitdb ✗ zstandard ✗ ruamel-yaml ✗ prompt-toolkit ✗ pytest-cov ✗ google-crc32c ✓ defusedxml ✗ google-resumable-media ✗ async-timeout ✓ authlib ✗ cycler ✗ orjson ✓ rapidfuzz ✓ deprecated ✗ chardet ✓ blinker ✓ tzlocal ✗ types-requests ✓ setuptools-scm ✓ uv ✗ kubernetes ✗ asn1crypto ✗ dill ✗ hf-xet ✗ pytest-asyncio ✓ google-cloud-aiplatform ✗ mako ✗ pyproject-hooks ✓ build ✗ google-api-python-client ✗ textual ✗ backoff ✗ prometheus-client ✗ marshmallow ✓ paramiko ✗ jsonschema-path ✓ flatbuffers ✓ uvloop ✗ google-auth-oauthlib ✗ google-cloud-bigquery ✗ tokenizers ✗ opentelemetry-exporter-otlp ✗ uritemplate ✓ pathable ✓ fastjsonschema ✗ google-auth-httplib2 ✗ pyperclip ✗ ipython ✓ httplib2 ✓ toml ✗ msal-extensions ✗ tiktoken ✓ jsonpointer ✓ httpx-sse ✗ multiprocess ✗

Top 240 - 360

nodeenv ✗ mypy ✓ transformers ✓ pymupdf ✓ sqlparse ✗ onnxruntime ✓ jsonref ✓ databricks-sdk ✗ babel ✗ beartype ✓ httptools ✓ cyclopts ✓ cloudpickle ✗ cython ✗ azure-storage-blob ✗ tornado ✗ fastmcp ✓ gunicorn ✓ pre-commit ✓ rich-rst ✗ sentry-sdk ✗ executing ✗ parso ✗ opentelemetry-instrumentation-requests ✗ identify ✓ aiofiles ✗ traitlets ✓ google-cloud-secret-manager ✗ opentelemetry-util-http ✗ xmltodict ✗ jedi ✗ asttokens ✗ cfgv ✓ langchain-core ✓ grpc-google-iam-v1 ✗ black ✓ py-key-value-aio ✓ durationpy ✓ py4j ✗ matplotlib-inline ✗ asgiref ✗ importlib-resources ✓ python-json-logger ✓ xxhash ✗ google-cloud-batch ✗ typing-inspect ✗ vcs-versioning ✓ pure-eval ✗ stack-data ✗ pytest-xdist ✗ cachecontrol ✓ pydantic-ai-slim ✓ h2 ✗ dbt-core ✓ markdown ✓ webencodings ✓ uncalled-for ✓ hpack ✗ hyperframe ✗ google-analytics-admin ✗ nest-asyncio ✗ execnet ✗ termcolor ✓ caio ✓ aiofile ✗ litellm ✗ jsonpatch ✗ pymongo ✗ dbt-adapters ✓ watchdog ✗ grpcio-health-checking ✗ anthropic ✗ tree-sitter ✓ torch ✓ dataclasses-json ✗ debugpy ✗ dulwich ✓ asyncio ✓ pkginfo ✗ pandas-stubs ✓ aioitertools ✓ awswrangler ✓ pymysql ✓ lz4 ✗ pytest-mock ✗ jsonpath-ng ✓ yandexcloud ✗ pyzmq ✗ isort ✓ dbt-common ✓ pydantic-graph ✓ pycryptodome ✗ pymupdf4llm ✓ typedload ✓ slack-sdk ✗ datasets ✓ deepdiff ✓ arxiv ✗ pymupdf-layout ✓ poetry ✓ mccabe ✗ smart-open ✓ fastapi-mcp ✓ wikipedia-api ✓ narwhals ✗ rfc3339-validator ✓ msrest ✗ librt ✗ langsmith ✓ pygithub ✗ openapi-pydantic ✗ rich-toolkit ✓ databricks-sql-connector ✗ gcsfs ✓ ruamel-yaml-clib ✗ tinycss2 ✓ pendulum ✗ cleo ✗ safetensors ✗ invoke ✗

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.