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

Top 120 - 240

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

Top 240 - 360

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

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.