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

Top 120 - 240

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

Top 240 - 360

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

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.