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

Top 120 - 240

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

Top 240 - 360

traitlets ✓ webencodings ✓ azure-identity ✓ rapidfuzz ✓ aiofiles ✗ smmap ✗ httplib2 ✓ docutils ✗ asn1crypto ✗ gitdb ✗ pexpect ✓ google-api-python-client ✓ msal-extensions ✗ google-auth-httplib2 ✓ jsonpatch ✓ executing ✗ joserfc ✓ playwright ✓ pyee ✓ sqlparse ✓ fastjsonschema ✓ transformers ✓ opentelemetry-exporter-otlp-proto-grpc ✓ babel ✗ markdown ✓ structlog ✓ gunicorn ✓ pypdfium2 ✓ pytest-timeout ✗ google-auth-oauthlib ✓ ipython ✓ brotli ✓ tornado ✓ jedi ✓ parso ✗ grpc-google-iam-v1 ✓ pytest-json-ctrf ✓ opentelemetry-exporter-otlp-common ✓ tinycss2 ✓ pyzmq ✓ asttokens ✗ async-timeout ✓ xmltodict ✗ watchdog ✓ matplotlib-inline ✗ paramiko ✗ pure-eval ✗ ast-serialize ✗ stack-data ✗ azure-storage-blob ✓ snowflake-connector-python ✓ black ✓ cachecontrol ✓ python-json-logger ✓ griffelib ✓ opentelemetry-exporter-http-transport ✓ aioitertools ✓ pyproject-hooks ✓ jupyter-core ✓ croniter ✗ debugpy ✓ build ✓ types-pyyaml ✓ cedarpy ✓ cython ✗ lark ✓ typedload ✓ sqlglot ✓ safetensors ✓ litellm ✓ langsmith ✓ isort ✓ slack-sdk ✗ pdfminer-six ✓ nbformat ✓ pytest-mock ✓ jupyter-client ✓ opentelemetry-instrumentation-asgi ✓ reportlab ✓ marshmallow ✓ nest-asyncio ✗ tomli-w ✓ uuid-utils ✓ awscli ✓ beartype ✓ opentelemetry-instrumentation-fastapi ✓ databricks-sdk ✓ google-cloud-aiplatform ✓ kubernetes ✓ lz4 ✗ xlrd ✗ argon2-cffi-bindings ✓ loguru ✗ argon2-cffi ✗ awswrangler ✓ cbor2 ✓ pycryptodome ✗ multiprocess ✗ pymysql ✓ text-unidecode ✓ types-requests ✓ ipython-pygments-lexers ✓ rfc3339-validator ✓ pathable ✓ fastuuid ✗ termcolor ✓ jsonschema-path ✓ cyclopts ✓ pdfplumber ✓ pytokens ✗ graphql-core ✓ jsonref ✓ poetry-core ✓ python-slugify ✓ pyperclip ✗ duckdb ✓ shapely ✓ opentelemetry-instrumentation-requests ✓ deprecation ✓ 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.