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

Top 120 - 240

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

Top 240 - 360

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

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.