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

Top 120 - 240

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

Top 240 - 360

httplib2 ✓ google-cloud-bigquery ✓ traitlets ✓ google-cloud-secret-manager ✓ poetry-core ✓ anthropic ✗ google-cloud-batch ✓ jsonpointer ✓ sympy ✗ build ✓ pydantic-graph ✓ executing ✗ jedi ✓ parso ✗ mpmath ✗ aiofiles ✗ fastjsonschema ✗ paramiko ✗ black ✓ sentry-sdk ✗ google-cloud-aiplatform ✓ msal-extensions ✗ matplotlib-inline ✗ google-cloud-kms ✗ backoff ✗ google-cloud-compute ✓ asttokens ✗ google-analytics-admin ✓ azure-storage-blob ✗ sqlparse ✗ authlib ✓ cloudpickle ✗ gcsfs ✓ stack-data ✗ pure-eval ✗ narwhals ✓ asgiref ✗ datasets ✓ joserfc ✓ grpc-google-iam-v1 ✗ pytest-xdist ✗ webencodings ✓ gunicorn ✓ babel ✗ termcolor ✓ types-requests ✓ opentelemetry-instrumentation-threading ✓ kubernetes ✓ marshmallow ✓ databricks-sdk ✓ execnet ✗ google-cloud-dlp ✓ python-json-logger ✓ cython ✗ cachecontrol ✓ jsonpatch ✗ tornado ✗ tree-sitter ✓ librt ✗ xmltodict ✗ setuptools-scm ✓ google-cloud-texttospeech ✗ google-cloud-speech ✓ pandas-stubs ✓ google-cloud-pubsub ✓ pymongo ✗ mdit-py-plugins ✗ watchdog ✗ markdown ✓ dbt-adapters ✓ databricks-sql-connector ✗ asyncpg ✗ aioitertools ✓ py4j ✗ isort ✓ linkify-it-py ✓ uc-micro-py ✓ importlib-resources ✓ tinycss2 ✓ dulwich ✓ structlog ✓ pytest-mock ✗ dbt-core ✓ llama-parse ✓ pyperclip ✗ llama-cloud-services ✓ lz4 ✗ fastuuid ✗ pypdf ✗ debugpy ✗ nest-asyncio ✗ xlsxwriter ✗ pkginfo ✗ pyzmq ✗ cyclopts ✓ jsonschema-path ✓ flatbuffers ✓ vcs-versioning ✓ langsmith ✓ rich-toolkit ✓ pytokens ✗ snowflake-snowpark-python ✓ google-cloud-tasks ✗ types-toml ✓ safetensors ✓ cbor2 ✓ python-docx ✗ google-cloud-logging ✓ google-cloud-monitoring ✓ psycopg ✓ typing-inspect ✗ pymupdf ✓ ruamel-yaml-clib ✗ sphinx ✓ slack-sdk ✗ beartype ✓ poetry ✓ torch ✓ pathable ✓ pycryptodome ✗

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.