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

Top 120 - 240

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

Top 240 - 360

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

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.