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

Top 120 - 240

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

Top 240 - 360

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

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.