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

Top 120 - 240

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

Top 240 - 360

deprecated ✗ cfgv ✓ mpmath ✗ black ✓ asn1crypto ✗ rapidfuzz ✓ google-cloud-secret-manager ✓ msal-extensions ✗ awscli ✓ jsonpointer ✓ narwhals ✓ aiofiles ✗ pypdf ✗ async-timeout ✓ webencodings ✓ pytest-xdist ✗ cloudpickle ✗ paramiko ✗ librt ✗ ipython ✓ execnet ✗ authlib ✓ sqlparse ✓ pydantic-ai-slim ✓ datasets ✓ fastjsonschema ✓ google-cloud-batch ✓ pyproject-hooks ✓ grpc-google-iam-v1 ✓ gcsfs ✓ databricks-sdk ✓ joserfc ✓ asgiref ✓ traitlets ✓ psycopg ✓ build ✓ poetry-core ✓ azure-storage-blob ✗ gunicorn ✓ google-cloud-aiplatform ✓ isort ✓ jsonpatch ✗ google-cloud-kms ✓ google-analytics-admin ✓ babel ✗ psycopg-binary ✓ google-cloud-compute ✓ setuptools-scm ✗ executing ✗ cython ✗ langsmith ✓ parso ✗ jedi ✓ markdown ✓ pydantic-graph ✓ cachecontrol ✓ asyncpg ✗ asttokens ✗ marshmallow ✓ xmltodict ✗ vcs-versioning ✗ google-cloud-dlp ✓ google-cloud-speech ✓ watchdog ✗ python-json-logger ✓ tornado ✗ python-docx ✗ google-cloud-pubsub ✓ matplotlib-inline ✗ safetensors ✓ playwright ✓ google-cloud-texttospeech ✓ dbt-adapters ✓ structlog ✓ stack-data ✗ pure-eval ✗ tinycss2 ✓ fastuuid ✗ pymupdf ✓ sglang ✓ kubernetes ✓ pytokens ✗ google-cloud-logging ✓ pyee ✓ tree-sitter ✓ aioitertools ✓ lz4 ✗ pymongo ✗ fastmcp ✓ py4j ✗ weaviate-client ✓ pymysql ✓ xlsxwriter ✗ mdit-py-plugins ✗ flatbuffers ✓ nest-asyncio ✗ termcolor ✓ tomli-w ✓ croniter ✗ dbt-core ✓ brotli ✓ pyzmq ✗ google-cloud-monitoring ✓ pyperclip ✗ griffelib ✓ pytest-timeout ✗ slack-sdk ✗ google-cloud-tasks ✓ linkify-it-py ✓ opentelemetry-exporter-prometheus ✓ opentelemetry-instrumentation-fastapi ✓ pytest-mock ✗ pycryptodome ✗ debugpy ✗ importlib-resources ✓ torch ✓ fastmcp-slim ✓ uc-micro-py ✓ deprecation ✓ typedload ✓

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.