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. 248 green packages (68.9%) have dropped support for Python 3.9;
  2. 112 uncolored packages (31.1%) 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 ✓ typing-extensions ✗ packaging ✗ certifi ✗ idna ✗ urllib3 ✓ charset-normalizer ✗ requests ✓ cryptography ✗ cffi ✓ pluggy ✓ python-dateutil ✓ pycparser ✓ pyyaml ✗ pygments ✗ pydantic ✓ pydantic-core ✓ botocore ✓ numpy ✓ click ✓ anyio ✓ setuptools ✓ six ✓ annotated-types ✓ typing-inspection ✓ h11 ✗ pytest ✓ iniconfig ✓ attrs ✗ markupsafe ✓ httpx ✗ tzdata ✓ httpcore ✗ pyjwt ✗ protobuf ✓ jinja2 ✓ python-dotenv ✓ s3transfer ✓ pandas ✓ opentelemetry-api ✓ pillow ✓ starlette ✓ aiobotocore ✓ uvicorn ✓ platformdirs ✓ rpds-py ✓ jsonschema ✓ pathspec ✗ referencing ✓ filelock ✓ jsonschema-specifications ✗ pip ✓ tomlkit ✗ jmespath ✗ fsspec ✓ multidict ✓ markdown-it-py ✓ rich ✗ yarl ✓ aiohttp ✓ mdurl ✗ pytz ✗ propcache ✓ websockets ✓ annotated-doc ✗ fastapi ✓ frozenlist ✗ python-multipart ✓ googleapis-common-protos ✓ aiosignal ✓ sniffio ✓ aiohappyeyeballs ✓ pyasn1 ✗ tqdm ✗ pydantic-settings ✓ pyarrow ✓ lxml ✗ truststore ✓ wrapt ✗ httpx2 ✓ httpcore2 ✓ trove-classifiers ✓ google-auth ✓ jiter ✓ hatchling ✓ tenacity ✓ ruff ✗ pyasn1-modules ✗ sqlalchemy ✓ greenlet ✓ openai ✓ scipy ✓ pyparsing ✗ zipp ✓ psutil ✓ grpcio-status ✓ grpcio ✓ importlib-metadata ✓ regex ✓ watchfiles ✓ openpyxl ✗ et-xmlfile ✗ wheel ✗ opentelemetry-semantic-conventions ✓ google-api-core ✓ distro ✗ opentelemetry-sdk ✓ soupsieve ✓ sse-starlette ✓ mcp ✓ coverage ✓ beautifulsoup4 ✓ shellingham ✗ werkzeug ✓ huggingface-hub ✓ mypy-extensions ✓ typer ✓ uvloop ✗ editables ✗ docstring-parser ✗

Top 120 - 240

dnspython ✓ opentelemetry-proto ✓ proto-plus ✓ itsdangerous ✓ wcwidth ✗ httptools ✓ pytest-asyncio ✓ colorama ✗ requests-oauthlib ✗ oauthlib ✗ s3fs ✓ defusedxml ✗ networkx ✓ opentelemetry-exporter-otlp-proto-common ✓ cachetools ✓ tomli ✓ flask ✓ hf-xet ✗ virtualenv ✗ sortedcontainers ✓ fonttools ✓ blinker ✓ pytest-cov ✗ redis ✓ psycopg2-binary ✓ more-itertools ✓ opentelemetry-exporter-otlp-proto-http ✓ msgpack ✓ distlib ✗ mako ✓ exceptiongroup ✓ alembic ✓ xlsxwriter ✗ prompt-toolkit ✓ psycopg ✓ tiktoken ✓ tokenizers ✓ requests-toolbelt ✗ anthropic ✓ psycopg-binary ✓ scikit-learn ✓ orjson ✓ execnet ✗ cloudpickle ✗ pytest-xdist ✗ mypy ✓ pypdf ✗ httpx-sse ✗ isodate ✗ tabulate ✓ threadpoolctl ✓ hpack ✓ h2 ✓ email-validator ✗ hyperframe ✗ python-discovery ✗ nodeenv ✓ rsa ✗ tzlocal ✓ matplotlib ✓ joblib ✓ uv ✗ azure-core ✓ pyopenssl ✗ websocket-client ✓ zstandard ✗ ruamel-yaml ✗ google-cloud-core ✓ kiwisolver ✓ opentelemetry-instrumentation ✓ pynacl ✗ python-pptx ✗ bcrypt ✗ grpcio-tools ✓ msal ✗ google-cloud-bigquery ✓ contourpy ✓ cycler ✗ prometheus-client ✗ librt ✗ google-cloud-storage ✓ google-genai ✓ chardet ✓ sympy ✗ google-crc32c ✓ mpmath ✗ dill ✗ langchain ✓ langchain-core ✓ google-resumable-media ✓ xxhash ✗ jsonpointer ✓ pymupdf ✓ identify ✓ pre-commit ✓ cfgv ✓ sentry-sdk ✗ asgiref ✓ docker ✗ backoff ✗ uritemplate ✓ keyring ✓ jaraco-functools ✓ decorator ✗ deprecated ✓ jaraco-classes ✓ narwhals ✓ toml ✗ jeepney ✓ gitpython ✗ azure-identity ✓ httplib2 ✓ ptyprocess ✓ secretstorage ✓ jaraco-context ✓ google-api-python-client ✓ asn1crypto ✗ webencodings ✓ docutils ✗ asyncpg ✗

Top 240 - 360

traitlets ✓ aiofiles ✗ mcp-types ✓ opentelemetry-util-http ✓ python-docx ✗ smmap ✗ flatbuffers ✓ google-auth-httplib2 ✓ gitdb ✗ authlib ✓ onnxruntime ✓ msal-extensions ✗ transformers ✓ rapidfuzz ✓ playwright ✓ pexpect ✓ pyee ✓ executing ✗ jsonpatch ✓ sqlparse ✓ opentelemetry-exporter-otlp-proto-grpc ✓ joserfc ✓ google-auth-oauthlib ✓ babel ✗ fastjsonschema ✓ gunicorn ✓ markdown ✓ pytest-timeout ✗ async-timeout ✓ pytest-json-ctrf ✓ brotli ✓ structlog ✓ tornado ✓ ipython ✓ grpc-google-iam-v1 ✓ pyzmq ✓ jedi ✓ parso ✗ tinycss2 ✓ paramiko ✗ asttokens ✗ xmltodict ✗ snowflake-connector-python ✓ azure-storage-blob ✓ opentelemetry-exporter-otlp-common ✓ black ✓ ast-serialize ✗ watchdog ✓ pypdfium2 ✓ matplotlib-inline ✗ pure-eval ✗ stack-data ✗ cachecontrol ✓ python-json-logger ✓ cedarpy ✓ croniter ✗ griffelib ✓ aioitertools ✓ jupyter-core ✓ safetensors ✓ litellm ✓ pyproject-hooks ✓ opentelemetry-exporter-http-transport ✓ cython ✗ isort ✓ types-pyyaml ✓ debugpy ✓ build ✓ sqlglot ✓ awscli ✓ google-cloud-aiplatform ✓ nbformat ✓ multiprocess ✗ langsmith ✓ lark ✓ reportlab ✓ nest-asyncio ✗ jupyter-client ✓ tomli-w ✓ slack-sdk ✗ marshmallow ✓ databricks-sdk ✓ opentelemetry-instrumentation-asgi ✓ pytest-mock ✓ awswrangler ✓ kubernetes ✓ xlrd ✗ pymysql ✓ lz4 ✗ uuid-utils ✓ opentelemetry-instrumentation-fastapi ✓ fastuuid ✗ argon2-cffi-bindings ✓ loguru ✗ beartype ✓ argon2-cffi ✗ pycryptodome ✗ cbor2 ✓ pytokens ✗ termcolor ✓ typedload ✓ rfc3339-validator ✓ types-requests ✓ shapely ✓ pdfminer-six ✓ duckdb ✓ text-unidecode ✓ ipython-pygments-lexers ✓ graphql-core ✓ deprecation ✓ pathable ✓ cyclopts ✓ jsonschema-path ✓ setuptools-scm ✗ python-slugify ✓ poetry-core ✓ jsonref ✓ wsproto ✓ opentelemetry-instrumentation-requests ✓ 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.