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

Top 120 - 240

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

Top 240 - 360

opentelemetry-util-http ✓ google-auth-httplib2 ✓ gitdb ✗ ptyprocess ✓ rapidfuzz ✓ httplib2 ✓ fastjsonschema ✓ authlib ✓ msal-extensions ✗ pexpect ✓ python-pptx ✗ python-docx ✗ jsonpatch ✓ playwright ✓ google-auth-oauthlib ✓ executing ✗ pyee ✓ opentelemetry-exporter-otlp-proto-grpc ✓ black ✓ joserfc ✓ tinycss2 ✓ sqlparse ✓ async-timeout ✓ markdown ✓ babel ✗ snowflake-connector-python ✓ transformers ✓ paramiko ✗ tornado ✗ gunicorn ✓ structlog ✓ grpc-google-iam-v1 ✓ pymupdf ✓ mcp-types ✓ jedi ✓ parso ✗ xmltodict ✗ pytest-timeout ✗ ipython ✓ asttokens ✗ azure-storage-blob ✓ aioitertools ✓ brotli ✓ watchdog ✗ litellm ✓ pyzmq ✓ matplotlib-inline ✗ pyproject-hooks ✓ google-cloud-aiplatform ✓ cachecontrol ✓ ast-serialize ✗ pure-eval ✗ flatbuffers ✓ python-json-logger ✓ nbformat ✓ griffelib ✓ stack-data ✗ onnxruntime ✓ build ✓ beartype ✓ typedload ✓ awscli ✓ isort ✓ jupyter-core ✓ croniter ✗ databricks-sdk ✓ marshmallow ✓ pypdfium2 ✓ awswrangler ✓ safetensors ✓ langsmith ✓ slack-sdk ✗ cython ✗ multiprocess ✗ pytest-mock ✓ types-pyyaml ✓ debugpy ✓ setuptools-scm ✗ nest-asyncio ✗ kubernetes ✓ opentelemetry-instrumentation-asgi ✓ sqlglot ✓ lz4 ✗ lark ✓ opentelemetry-instrumentation-fastapi ✓ pycryptodome ✗ cyclopts ✓ jupyter-client ✓ jsonref ✓ uuid-utils ✓ pytokens ✗ reportlab ✓ vcs-versioning ✗ tomli-w ✓ pyperclip ✗ poetry-core ✓ pymysql ✓ rich-rst ✗ pathable ✓ jsonschema-path ✓ argon2-cffi-bindings ✓ cbor2 ✓ fastuuid ✗ argon2-cffi ✗ xlrd ✗ shapely ✓ text-unidecode ✓ types-requests ✓ py-key-value-aio ✓ deprecation ✓ requests-file ✓ python-slugify ✓ toolz ✗ wsproto ✓ py4j ✗ rfc3339-validator ✓ termcolor ✓ graphql-core ✓ psycopg2 ✓ 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.