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

Top 120 - 240

opentelemetry-instrumentation ✓ more-itertools ✓ langchain ✓ editables ✗ mcp ✓ sse-starlette ✓ oauthlib ✗ opentelemetry-exporter-otlp-proto-common ✓ proto-plus ✓ pyopenssl ✗ distlib ✗ dnspython ✓ wcwidth ✗ networkx ✓ google-genai ✓ requests-toolbelt ✗ coverage ✓ opentelemetry-exporter-otlp-proto-grpc ✓ rsa ✗ python-discovery ✗ gitpython ✗ pytest-json-ctrf ✓ msgpack ✓ docstring-parser ✗ ruff ✗ smmap ✗ mypy-extensions ✗ psycopg2-binary ✗ sortedcontainers ✓ grpcio-tools ✓ keyring ✓ fonttools ✓ werkzeug ✓ hf-xet ✗ google-cloud-storage ✓ tabulate ✓ matplotlib ✓ jaraco-classes ✓ redis ✓ jeepney ✓ secretstorage ✓ azure-identity ✗ decorator ✗ email-validator ✗ weaviate-client ✓ prompt-toolkit ✗ jaraco-functools ✓ azure-core ✓ pytest-asyncio ✓ jaraco-context ✓ pynacl ✗ defusedxml ✗ gitdb ✗ httpx-sse ✗ kiwisolver ✓ websocket-client ✗ docutils ✗ multiprocess ✗ ydb ✗ scikit-learn ✓ tiktoken ✓ isodate ✗ tokenizers ✓ httptools ✓ tzlocal ✓ uvloop ✗ contourpy ✓ pytest-cov ✗ msal ✗ dill ✗ itsdangerous ✓ flask ✓ alembic ✓ opentelemetry-instrumentation-requests ✓ sglang ✓ bcrypt ✗ google-cloud-core ✓ orjson ✓ joblib ✗ opentelemetry-util-http ✓ google-api-python-client ✗ transformers ✓ snowflake-connector-python ✓ rapidfuzz ✓ threadpoolctl ✗ ruamel-yaml ✗ ptyprocess ✓ httplib2 ✓ chardet ✓ uritemplate ✓ pexpect ✓ blinker ✓ google-resumable-media ✓ google-auth-httplib2 ✓ mako ✗ google-auth-oauthlib ✓ google-crc32c ✓ langchain-core ✓ opentelemetry-exporter-otlp ✓ cycler ✗ zstandard ✗ async-timeout ✓ nodeenv ✗ google-cloud-bigquery ✓ xxhash ✗ google-cloud-secret-manager ✓ pydantic-ai-slim ✓ google-cloud-batch ✓ docker ✗ joserfc ✓ deprecated ✗ ipython ✓ asn1crypto ✗ authlib ✓ pytest-xdist ✗ hpack ✓ anthropic ✗ uv ✗ prometheus-client ✗ execnet ✗

Top 240 - 360

identify ✓ pre-commit ✓ aiofiles ✗ google-analytics-admin ✓ sympy ✗ google-cloud-kms ✓ cfgv ✓ toml ✗ mypy ✓ pyproject-hooks ✓ google-cloud-compute ✓ mpmath ✗ h2 ✗ jsonpointer ✓ hyperframe ✗ browser-use ✓ gcsfs ✓ backoff ✗ traitlets ✓ paramiko ✗ poetry-core ✓ msal-extensions ✗ cloudpickle ✗ black ✓ fastjsonschema ✗ datasets ✓ google-cloud-dlp ✓ sentry-sdk ✗ google-cloud-aiplatform ✓ build ✓ sqlparse ✗ asgiref ✗ narwhals ✓ executing ✗ jedi ✓ databricks-sdk ✓ google-cloud-texttospeech ✓ webencodings ✓ azure-storage-blob ✗ parso ✗ babel ✗ pymupdf ✓ google-cloud-speech ✓ pyperclip ✗ matplotlib-inline ✗ opentelemetry-instrumentation-threading ✓ asttokens ✗ jsonpatch ✗ grpc-google-iam-v1 ✗ lmnr ✓ tornado ✗ gunicorn ✓ pandas-stubs ✓ databricks-sql-connector ✗ jsonschema-path ✓ stack-data ✗ pure-eval ✗ setuptools-scm ✗ marshmallow ✓ google-cloud-pubsub ✓ python-json-logger ✓ python-docx ✗ cachecontrol ✓ beartype ✓ xmltodict ✗ cython ✗ griffelib ✓ dbt-adapters ✓ pydantic-graph ✓ cyclopts ✓ pypdf ✗ pathable ✓ librt ✗ xlsxwriter ✗ jsonref ✓ types-requests ✓ pymongo ✗ py4j ✗ vcs-versioning ✗ flatbuffers ✓ rich-rst ✗ dbt-core ✓ termcolor ✓ py-key-value-aio ✓ isort ✓ markdown ✓ kubernetes ✓ google-cloud-tasks ✓ tinycss2 ✓ snowflake-snowpark-python ✓ aioitertools ✓ fastmcp ✓ langsmith ✓ asyncpg ✗ structlog ✓ pyzmq ✗ mdit-py-plugins ✗ watchdog ✗ typedload ✓ psycopg ✓ debugpy ✗ lz4 ✗ importlib-resources ✓ google-cloud-monitoring ✓ onnxruntime ✓ nest-asyncio ✗ google-cloud-logging ✓ llama-parse ✓ llama-cloud-services ✓ opentelemetry-exporter-prometheus ✓ pytest-mock ✗ uncalled-for ✓ linkify-it-py ✓ slack-sdk ✗ pytokens ✗ pycryptodome ✗ aiofile ✓ dulwich ✓ safetensors ✓ fastuuid ✗

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.