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

Top 120 - 240

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

Top 240 - 360

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

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.