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

Top 120 - 240

exceptiongroup ✓ truststore ✓ huggingface-hub ✓ httpx2 ✓ httpcore2 ✓ more-itertools ✓ opentelemetry-proto ✓ pytest-asyncio ✓ dnspython ✓ oauthlib ✗ distlib ✗ editables ✗ docstring-parser ✗ psycopg2-binary ✓ sortedcontainers ✓ httptools ✓ uvloop ✗ opentelemetry-exporter-otlp-proto-common ✓ pytest-cov ✗ networkx ✓ requests-toolbelt ✗ redis ✓ defusedxml ✗ fonttools ✓ rsa ✗ scikit-learn ✓ hf-xet ✗ msgpack ✓ prompt-toolkit ✓ opentelemetry-exporter-otlp-proto-http ✓ tiktoken ✓ isodate ✗ threadpoolctl ✗ alembic ✓ orjson ✓ mako ✓ pyopenssl ✗ werkzeug ✓ nodeenv ✗ langchain ✓ cloudpickle ✗ pynacl ✗ ghapi ✓ python-discovery ✗ tokenizers ✓ azure-core ✓ matplotlib ✓ joblib ✓ websocket-client ✓ tzlocal ✓ httpx-sse ✗ gitpython ✗ kiwisolver ✓ zstandard ✗ msal ✗ ruamel-yaml ✗ google-cloud-core ✓ chardet ✓ tabulate ✓ email-validator ✗ keyring ✓ bcrypt ✗ jaraco-classes ✓ smmap ✗ dill ✗ jaraco-functools ✓ google-cloud-storage ✓ jeepney ✓ mypy ✓ identify ✓ pre-commit ✓ itsdangerous ✓ secretstorage ✓ cfgv ✓ anthropic ✓ jaraco-context ✓ opentelemetry-instrumentation ✓ langchain-core ✓ gitdb ✗ google-cloud-bigquery ✓ contourpy ✓ cycler ✗ h2 ✓ hpack ✓ google-genai ✓ toml ✗ hyperframe ✗ decorator ✗ pytest-xdist ✗ execnet ✗ google-resumable-media ✓ docutils ✗ google-crc32c ✓ grpcio-tools ✓ prometheus-client ✗ asn1crypto ✗ sympy ✗ docker ✗ backoff ✗ mpmath ✗ uritemplate ✓ jsonpointer ✓ deprecated ✗ psycopg ✓ ptyprocess ✓ xxhash ✗ sentry-sdk ✗ pypdf ✗ flask ✓ google-api-python-client ✓ async-timeout ✓ pexpect ✓ google-auth-httplib2 ✓ uv ✗ rapidfuzz ✓ aiofiles ✗ asgiref ✓ azure-identity ✗ psycopg-binary ✓ httplib2 ✓

Top 240 - 360

pytest-json-ctrf ✓ msal-extensions ✗ blinker ✓ librt ✗ traitlets ✓ webencodings ✓ narwhals ✓ authlib ✓ google-auth-oauthlib ✓ black ✓ jsonpatch ✗ multiprocess ✗ opentelemetry-util-http ✓ fastjsonschema ✓ sqlparse ✓ asyncpg ✗ paramiko ✗ opentelemetry-exporter-otlp-proto-grpc ✓ babel ✗ executing ✗ joserfc ✓ snowflake-connector-python ✓ azure-storage-blob ✗ litellm ✓ typedload ✓ python-docx ✗ playwright ✓ tornado ✗ ipython ✓ grpc-google-iam-v1 ✓ xmltodict ✗ jedi ✓ parso ✗ gunicorn ✓ structlog ✓ transformers ✓ asttokens ✗ pyproject-hooks ✓ pure-eval ✗ xlsxwriter ✗ pyee ✓ watchdog ✗ markdown ✓ matplotlib-inline ✗ aioitertools ✓ isort ✓ tinycss2 ✓ pymupdf ✓ google-cloud-aiplatform ✓ stack-data ✗ pyzmq ✓ pytest-timeout ✗ build ✓ awswrangler ✓ pytest-mock ✗ awscli ✓ python-json-logger ✓ marshmallow ✓ mcp-types ✓ brotli ✓ griffelib ✓ databricks-sdk ✓ debugpy ✓ cachecontrol ✓ nest-asyncio ✗ langsmith ✓ setuptools-scm ✗ cython ✗ flatbuffers ✓ poetry-core ✓ croniter ✗ pyperclip ✗ ast-serialize ✗ jupyter-core ✓ sqlglot ✓ pymysql ✓ types-requests ✓ lz4 ✗ vcs-versioning ✗ nbformat ✓ slack-sdk ✗ beartype ✓ mdit-py-plugins ✗ uuid-utils ✓ kubernetes ✓ types-pyyaml ✓ xlrd ✗ jsonref ✓ pytokens ✗ safetensors ✓ cyclopts ✓ onnxruntime ✓ jupyter-client ✓ opentelemetry-instrumentation-fastapi ✓ linkify-it-py ✓ termcolor ✓ fastuuid ✗ pathable ✓ opentelemetry-instrumentation-asgi ✓ jsonschema-path ✓ tomli-w ✓ cbor2 ✓ types-protobuf ✓ loguru ✗ pycryptodome ✗ datasets ✓ semver ✓ py4j ✗ py-key-value-aio ✓ text-unidecode ✓ rich-rst ✗ wsproto ✓ lark ✓ python-slugify ✓ mccabe ✗ faker ✓ reportlab ✓ importlib-resources ✓ pymongo ✗ pypdfium2 ✓

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.