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

Top 120 - 240

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

Top 240 - 360

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

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.