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

Top 120 - 240

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

Top 240 - 360

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