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

Top 120 - 240

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

Top 240 - 360

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

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.