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

Top 120 - 240

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

Top 240 - 360

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

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.