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

Top 120 - 240

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

Top 240 - 360

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

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.