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

Top 120 - 240

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

Top 240 - 360

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

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.