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

Top 120 - 240

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

Top 240 - 360

jaraco-context ✓ opentelemetry-util-http ✓ rapidfuzz ✓ gitpython ✗ asn1crypto ✗ msal-extensions ✗ docutils ✗ pypdfium2 ✓ pexpect ✓ joserfc ✓ smmap ✗ jsonpatch ✓ aiofiles ✗ gitdb ✗ playwright ✓ google-api-python-client ✓ pytest-json-ctrf ✓ httplib2 ✓ fastjsonschema ✓ executing ✗ google-auth-httplib2 ✓ structlog ✓ pytest-timeout ✗ markdown ✓ opentelemetry-exporter-otlp-proto-grpc ✓ tornado ✓ pyee ✓ tinycss2 ✓ opentelemetry-exporter-otlp-common ✓ babel ✗ sqlparse ✓ gunicorn ✓ google-auth-oauthlib ✓ transformers ✓ pyzmq ✓ ipython ✓ brotli ✓ jedi ✓ parso ✗ async-timeout ✓ grpc-google-iam-v1 ✓ asttokens ✗ xmltodict ✗ watchdog ✓ matplotlib-inline ✗ ast-serialize ✗ pure-eval ✗ griffelib ✓ stack-data ✗ opentelemetry-exporter-http-transport ✓ paramiko ✗ azure-storage-blob ✓ snowflake-connector-python ✓ jupyter-core ✓ black ✓ python-json-logger ✓ cachecontrol ✓ nbformat ✓ litellm ✓ aioitertools ✓ pyproject-hooks ✓ pdfminer-six ✓ cython ✗ croniter ✗ debugpy ✓ build ✓ jupyter-client ✓ lark ✓ types-pyyaml ✓ sqlglot ✓ beartype ✓ safetensors ✓ databricks-sdk ✓ marshmallow ✓ langsmith ✓ isort ✓ awswrangler ✓ reportlab ✓ fastuuid ✗ slack-sdk ✗ opentelemetry-instrumentation-asgi ✓ awscli ✓ pytest-mock ✓ nest-asyncio ✗ uuid-utils ✓ google-cloud-aiplatform ✓ pycryptodome ✗ pymupdf4llm ✓ pdfplumber ✓ cyclopts ✓ argon2-cffi-bindings ✓ tomli-w ✓ opentelemetry-instrumentation-fastapi ✓ pathable ✓ argon2-cffi ✗ jsonschema-path ✓ xlrd ✗ kubernetes ✓ pymupdf-layout ✓ lz4 ✗ jsonref ✓ multiprocess ✗ cbor2 ✓ pymysql ✓ ipython-pygments-lexers ✓ pyperclip ✗ loguru ✗ text-unidecode ✓ deprecation ✓ rfc3339-validator ✓ rich-rst ✗ graphql-core ✓ termcolor ✓ shapely ✓ python-slugify ✓ py-key-value-aio ✓ mistune ✓ types-requests ✓ bleach ✓ mdit-py-plugins ✓

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.