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

Top 120 - 240

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

Top 240 - 360

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

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.