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

Top 120 - 240

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

Top 240 - 360

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

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.