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

Top 120 - 240

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

Top 240 - 360

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