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

Top 120 - 240

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

Top 240 - 360

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

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.