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

Top 120 - 240

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

Top 240 - 360

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

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.