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

Top 120 - 240

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

Top 240 - 360

webencodings ✓ rapidfuzz ✓ httplib2 ✓ asgiref ✓ msal-extensions ✗ narwhals ✓ google-auth-oauthlib ✓ sqlparse ✓ authlib ✓ opentelemetry-exporter-otlp-proto-grpc ✓ fastjsonschema ✓ black ✓ paramiko ✗ snowflake-connector-python ✓ tornado ✗ azure-storage-blob ✗ litellm ✓ executing ✗ jsonpatch ✗ opentelemetry-util-http ✓ asyncpg ✗ transformers ✓ babel ✗ joserfc ✓ ipython ✓ grpc-google-iam-v1 ✓ parso ✗ playwright ✓ python-docx ✗ jedi ✓ gunicorn ✓ asttokens ✗ pyzmq ✓ structlog ✓ google-cloud-aiplatform ✓ multiprocess ✗ pure-eval ✗ pyproject-hooks ✓ xmltodict ✗ matplotlib-inline ✗ tinycss2 ✓ awswrangler ✓ pyee ✓ xlsxwriter ✗ markdown ✓ mcp-types ✓ isort ✓ stack-data ✗ aioitertools ✓ typedload ✓ nest-asyncio ✗ watchdog ✗ pymupdf ✓ python-json-logger ✓ marshmallow ✓ awscli ✓ debugpy ✓ databricks-sdk ✓ build ✓ pytest-timeout ✗ jupyter-core ✓ brotli ✓ pytest-mock ✗ pymysql ✓ cachecontrol ✓ griffelib ✓ jupyter-client ✓ safetensors ✓ flatbuffers ✓ nbformat ✓ setuptools-scm ✗ poetry-core ✓ cython ✗ ast-serialize ✗ lz4 ✗ ghapi ✓ langsmith ✓ pyperclip ✗ sqlglot ✓ kubernetes ✓ beartype ✓ croniter ✗ slack-sdk ✗ jsonref ✓ types-requests ✓ vcs-versioning ✗ cyclopts ✓ pytokens ✗ py4j ✗ types-pyyaml ✓ pycryptodome ✗ py-key-value-aio ✓ onnxruntime ✓ xlrd ✗ uuid-utils ✓ pathable ✓ jsonschema-path ✓ tomli-w ✓ loguru ✗ termcolor ✓ fastuuid ✗ rich-rst ✗ datasets ✓ lark ✓ mdit-py-plugins ✗ cbor2 ✓ importlib-resources ✓ opentelemetry-instrumentation-fastapi ✓ psycopg2 ✓ semver ✓ text-unidecode ✓ pypdfium2 ✓ python-slugify ✓ mccabe ✗ pymongo ✗ scramp ✓ opentelemetry-instrumentation-asgi ✓ typing-inspect ✗ faker ✓ reportlab ✓

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.