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

Top 120 - 240

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

Top 240 - 360

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

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.