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 ✓ pydantic ✗ pycparser ✓ pluggy ✗ anyio ✓ numpy ✓ pydantic-core ✓ click ✓ pytest ✓ annotated-types ✓ iniconfig ✓ h11 ✗ typing-inspection ✓ attrs ✗ s3transfer ✓ httpx ✗ aiobotocore ✓ httpcore ✗ protobuf ✓ markupsafe ✓ pyjwt ✗ python-dotenv ✓ 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 ✗ tqdm ✗ pillow ✓ opentelemetry-api ✓ frozenlist ✗ aiosignal ✓ aiohappyeyeballs ✓ pip ✓ googleapis-common-protos ✓ pyasn1 ✗ websockets ✓ annotated-doc ✗ wrapt ✗ sniffio ✓ tzdata ✓ pytz ✗ greenlet ✓ fastapi ✓ google-auth ✓ zipp ✓ importlib-metadata ✓ pydantic-settings ✓ python-multipart ✓ wheel ✗ grpcio-status ✓ pyasn1-modules ✗ pyarrow ✓ hatchling ✓ tenacity ✓ sqlalchemy ✗ jiter ✓ trove-classifiers ✓ grpcio ✓ regex ✓ lxml ✗ s3fs ✓ openai ✓ pyparsing ✗ scipy ✓ beautifulsoup4 ✓ google-api-core ✓ watchfiles ✓ soupsieve ✓ ruff ✗ psutil ✓ openpyxl ✗ et-xmlfile ✗ coverage ✓ distro ✗ opentelemetry-semantic-conventions ✓ opentelemetry-sdk ✓ shellingham ✗ tomli ✓ proto-plus ✓ mcp ✓ typer ✓ mypy-extensions ✗ requests-oauthlib ✗ colorama ✗ cachetools ✓ truststore ✓ exceptiongroup ✓ sse-starlette ✓

Top 120 - 240

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

Top 240 - 360

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

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.