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

Top 120 - 240

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

Top 240 - 360

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

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.