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

Top 120 - 240

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

Top 240 - 360

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

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.