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

Top 120 - 240

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

Top 240 - 360

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

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.