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

Top 120 - 240

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

Top 240 - 360

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

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.