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

Top 120 - 240

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

Top 240 - 360

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

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.