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

Top 120 - 240

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

Top 240 - 360

backoff ✗ deprecated ✗ sympy ✗ rapidfuzz ✓ google-cloud-secret-manager ✓ pypdf ✗ mpmath ✗ awscli ✓ narwhals ✓ msal-extensions ✗ librt ✗ asn1crypto ✗ langchain-core ✓ executing ✗ cloudpickle ✗ jsonpointer ✓ aiofiles ✗ asttokens ✗ fastuuid ✗ paramiko ✗ jedi ✓ parso ✗ authlib ✓ google-cloud-aiplatform ✓ google-cloud-batch ✓ matplotlib-inline ✗ pytest-xdist ✗ isort ✓ pyproject-hooks ✓ sqlparse ✗ joserfc ✓ gunicorn ✓ stack-data ✗ fastjsonschema ✓ pure-eval ✗ execnet ✗ azure-storage-blob ✗ asgiref ✓ gcsfs ✓ webencodings ✓ poetry-core ✓ pydantic-ai-slim ✓ databricks-sdk ✓ build ✓ grpc-google-iam-v1 ✓ google-cloud-kms ✓ google-analytics-admin ✓ mdit-py-plugins ✗ truststore ✓ google-cloud-compute ✓ termcolor ✓ psycopg ✓ jsonpatch ✗ linkify-it-py ✓ babel ✗ uc-micro-py ✓ psycopg-binary ✓ markdown ✓ xmltodict ✗ google-cloud-dlp ✓ cbor2 ✓ weaviate-client ✓ cachecontrol ✓ cython ✗ asyncpg ✗ python-json-logger ✓ safetensors ✓ google-cloud-speech ✓ python-docx ✗ setuptools-scm ✗ marshmallow ✓ google-cloud-texttospeech ✓ langsmith ✓ dbt-adapters ✓ google-cloud-pubsub ✓ watchdog ✗ tornado ✗ httpx2 ✓ types-toml ✓ pytokens ✗ pydantic-graph ✓ tree-sitter ✓ vcs-versioning ✗ types-requests ✓ httpcore2 ✓ pymongo ✗ tinycss2 ✓ structlog ✓ kubernetes ✓ grpclib ✓ types-certifi ✓ pymupdf ✓ aioitertools ✓ lz4 ✗ xlsxwriter ✗ playwright ✓ cfn-lint ✓ fastmcp ✓ google-cloud-logging ✓ modal ✓ py4j ✗ opentelemetry-exporter-prometheus ✓ synchronicity ✓ pymysql ✓ pyperclip ✗ pyzmq ✗ flatbuffers ✓ dbt-core ✓ fastapi-cli ✓ griffelib ✓ google-cloud-monitoring ✓ beartype ✓ croniter ✗ tomli-w ✓ llama-cloud-services ✓ llama-parse ✓ pytest-mock ✗ google-cloud-tasks ✓ pyee ✗ brotli ✓

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.