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

Top 120 - 240

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

Top 240 - 360

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

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.