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

Top 120 - 240

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

Top 240 - 360

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

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.