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

Top 120 - 240

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

Top 240 - 360

narwhals ✓ psycopg-binary ✓ httplib2 ✓ asgiref ✓ azure-identity ✗ traitlets ✓ typedload ✓ aiofiles ✗ librt ✗ pypdf ✗ msal-extensions ✗ sqlparse ✓ jsonpatch ✗ fastjsonschema ✓ black ✓ paramiko ✗ babel ✗ authlib ✓ snowflake-connector-python ✓ executing ✗ opentelemetry-exporter-otlp-proto-grpc ✓ asyncpg ✗ gunicorn ✓ opentelemetry-instrumentation-requests ✓ structlog ✓ ipython ✓ markdown ✓ transformers ✓ azure-storage-blob ✗ jedi ✓ parso ✗ grpc-google-iam-v1 ✓ xmltodict ✗ tornado ✗ asttokens ✗ joserfc ✓ datasets ✓ awscli ✓ setuptools-scm ✗ cbor2 ✓ tinycss2 ✓ matplotlib-inline ✗ google-cloud-aiplatform ✓ pyproject-hooks ✓ marshmallow ✓ awswrangler ✓ build ✓ python-json-logger ✓ pure-eval ✗ stack-data ✗ databricks-sdk ✓ vcs-versioning ✗ litellm ✓ python-docx ✗ playwright ✓ aioitertools ✓ pyzmq ✓ cachecontrol ✓ poetry-core ✓ watchdog ✗ isort ✓ pymupdf ✓ xlsxwriter ✗ pytest-mock ✗ pyee ✓ langsmith ✓ types-toml ✓ pytest-timeout ✗ brotli ✓ slack-sdk ✗ grpclib ✓ types-requests ✓ cython ✗ nest-asyncio ✗ debugpy ✗ croniter ✗ nbformat ✓ types-certifi ✓ pymysql ✓ griffelib ✓ termcolor ✓ lz4 ✗ reportlab ✓ jupyter-core ✓ ast-serialize ✗ flatbuffers ✓ kubernetes ✓ modal ✓ synchronicity ✓ uuid-utils ✓ fastuuid ✗ types-pyyaml ✓ pyperclip ✗ py4j ✗ sqlglot ✓ jupyter-client ✓ safetensors ✓ mdit-py-plugins ✗ typing-inspect ✗ tomli-w ✓ jsonref ✓ linkify-it-py ✓ opentelemetry-instrumentation-fastapi ✓ text-unidecode ✓ beartype ✓ importlib-resources ✓ pytokens ✗ ruamel-yaml-clib ✗ loguru ✗ pycryptodome ✗ lark ✓ xlrd ✗ mccabe ✗ opentelemetry-instrumentation-asgi ✓ cyclopts ✓ faker ✓ psycopg2 ✗ graphql-core ✗ pathable ✓ python-slugify ✗

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.