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

Top 120 - 240

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

Top 240 - 360

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

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.