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 ✓ pygments ✗ pyyaml ✗ python-dateutil ✗ six ✓ botocore ✓ pycparser ✓ pydantic ✗ pluggy ✗ anyio ✓ numpy ✓ pydantic-core ✓ click ✓ pytest ✓ annotated-types ✓ iniconfig ✓ h11 ✗ typing-inspection ✓ attrs ✗ s3transfer ✓ aiobotocore ✓ httpx ✗ httpcore ✗ protobuf ✓ markupsafe ✓ python-dotenv ✓ pyjwt ✗ fsspec ✓ pandas ✓ platformdirs ✓ jinja2 ✓ filelock ✓ uvicorn ✓ jmespath ✗ pathspec ✗ starlette ✓ multidict ✓ yarl ✓ jsonschema ✓ rpds-py ✓ aiohttp ✓ propcache ✓ rich ✗ markdown-it-py ✓ tomlkit ✗ referencing ✓ jsonschema-specifications ✗ mdurl ✗ opentelemetry-api ✓ pillow ✓ tqdm ✗ frozenlist ✗ aiohappyeyeballs ✓ aiosignal ✓ pip ✓ googleapis-common-protos ✓ pyasn1 ✗ websockets ✓ annotated-doc ✗ wrapt ✗ sniffio ✓ tzdata ✓ pytz ✗ greenlet ✓ fastapi ✓ google-auth ✓ zipp ✓ importlib-metadata ✓ pydantic-settings ✓ python-multipart ✓ grpcio-status ✓ wheel ✗ hatchling ✓ pyasn1-modules ✗ pyarrow ✓ jiter ✓ sqlalchemy ✗ trove-classifiers ✓ tenacity ✓ grpcio ✓ lxml ✗ s3fs ✓ regex ✓ pyparsing ✗ openai ✓ scipy ✓ watchfiles ✓ beautifulsoup4 ✓ google-api-core ✓ ruff ✗ soupsieve ✓ psutil ✓ openpyxl ✗ et-xmlfile ✗ coverage ✓ distro ✗ opentelemetry-semantic-conventions ✓ opentelemetry-sdk ✓ shellingham ✗ proto-plus ✓ tomli ✓ mcp ✓ typer ✓ requests-oauthlib ✗ mypy-extensions ✗ colorama ✗ truststore ✓ cachetools ✓ exceptiongroup ✓ httpx2 ✓

Top 120 - 240

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

Top 240 - 360

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