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

Top 120 - 240

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

Top 240 - 360

psycopg-binary ✓ narwhals ✓ rapidfuzz ✓ pypdf ✗ aiofiles ✗ webencodings ✓ asgiref ✓ msal-extensions ✗ librt ✗ jsonpatch ✗ traitlets ✓ typedload ✓ sqlparse ✓ black ✓ paramiko ✗ fastjsonschema ✓ snowflake-connector-python ✓ authlib ✓ asyncpg ✗ babel ✗ opentelemetry-exporter-otlp-proto-grpc ✓ gunicorn ✓ azure-storage-blob ✗ executing ✗ structlog ✓ google-cloud-aiplatform ✓ awscli ✓ setuptools-scm ✗ joserfc ✓ datasets ✓ grpc-google-iam-v1 ✓ markdown ✓ ipython ✓ xmltodict ✗ opentelemetry-instrumentation-requests ✓ awswrangler ✓ tornado ✗ transformers ✓ cbor2 ✓ jedi ✓ vcs-versioning ✗ parso ✗ python-docx ✗ tinycss2 ✓ asttokens ✗ playwright ✓ databricks-sdk ✓ pyproject-hooks ✓ pymupdf ✓ matplotlib-inline ✗ marshmallow ✓ python-json-logger ✓ build ✓ pyee ✓ litellm ✓ aioitertools ✓ xlsxwriter ✗ pyzmq ✓ pure-eval ✗ stack-data ✗ isort ✓ cachecontrol ✓ watchdog ✗ langsmith ✓ pytest-timeout ✗ types-toml ✓ grpclib ✓ poetry-core ✓ griffelib ✓ reportlab ✓ pytest-mock ✗ cython ✗ croniter ✗ flatbuffers ✓ ast-serialize ✗ mcp-types ✓ pymysql ✓ nest-asyncio ✗ brotli ✓ pyperclip ✗ types-certifi ✓ nbformat ✓ types-requests ✓ slack-sdk ✗ kubernetes ✓ modal ✓ synchronicity ✓ lz4 ✗ debugpy ✗ py4j ✗ jupyter-core ✓ termcolor ✓ uuid-utils ✓ sqlglot ✓ jsonref ✓ fastuuid ✗ cyclopts ✓ beartype ✓ types-pyyaml ✓ mdit-py-plugins ✗ tomli-w ✓ linkify-it-py ✓ opentelemetry-instrumentation-fastapi ✓ safetensors ✓ jupyter-client ✓ xlrd ✗ pathable ✓ jsonschema-path ✓ onnxruntime ✓ pycryptodome ✗ pytokens ✗ opentelemetry-instrumentation-asgi ✓ torch ✓ psycopg2 ✗ importlib-resources ✓ loguru ✗ wsproto ✓ scramp ✓ typing-inspect ✗ text-unidecode ✓

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.