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

Top 120 - 240

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

Top 240 - 360

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

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.