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

Top 120 - 240

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

Top 240 - 360

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