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 ✗ 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 ✓ aiobotocore ✓ attrs ✗ typing-inspection ✓ protobuf ✓ markupsafe ✓ fsspec ✓ httpx ✗ httpcore ✗ ghapi ✓ platformdirs ✓ python-dotenv ✓ jinja2 ✓ pathspec ✗ pandas ✓ jmespath ✗ pyjwt ✗ filelock ✓ tomlkit ✗ starlette ✓ aiohttp ✓ yarl ✓ uvicorn ✓ multidict ✗ rpds-py ✓ jsonschema ✓ rich ✗ propcache ✓ markdown-it-py ✓ pip ✓ frozenlist ✗ tqdm ✗ referencing ✓ aiosignal ✓ jsonschema-specifications ✗ mdurl ✗ pyasn1 ✗ aiohappyeyeballs ✓ pillow ✓ googleapis-common-protos ✓ wheel ✗ sniffio ✓ websockets ✓ annotated-doc ✗ pytz ✗ wrapt ✗ importlib-metadata ✓ zipp ✓ greenlet ✓ fastapi ✓ google-auth ✓ grpcio-status ✓ trove-classifiers ✓ tzdata ✓ hatchling ✓ tenacity ✓ opentelemetry-semantic-conventions ✓ pydantic-settings ✓ pyarrow ✓ s3fs ✓ tomli ✓ opentelemetry-api ✓ pyasn1-modules ✗ sqlalchemy ✗ beautifulsoup4 ✓ soupsieve ✓ grpcio ✓ regex ✓ pyparsing ✗ python-multipart ✓ lxml ✗ scipy ✓ watchfiles ✓ jiter ✗ coverage ✓ openai ✓ google-api-core ✓ ruff ✗ psutil ✓ openpyxl ✗ et-xmlfile ✗ distro ✗ shellingham ✗ opentelemetry-sdk ✓ mypy-extensions ✗ typer ✓ virtualenv ✗ editables ✗ requests-oauthlib ✗ proto-plus ✓ colorama ✗ exceptiongroup ✓ huggingface-hub ✓

Top 120 - 240

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

Top 240 - 360

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

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.