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

Top 120 - 240

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

Top 240 - 360

google-analytics-admin ✓ google-cloud-kms ✓ google-cloud-compute ✓ mypy ✓ jedi ✓ pre-commit ✓ anthropic ✗ identify ✓ h2 ✗ hyperframe ✗ hpack ✗ executing ✗ build ✓ cfgv ✓ google-cloud-aiplatform ✓ parso ✗ fastjsonschema ✗ sympy ✗ aiofiles ✗ authlib ✓ backoff ✗ mpmath ✗ matplotlib-inline ✗ paramiko ✗ gcsfs ✓ asttokens ✗ msal-extensions ✗ pydantic-graph ✓ joserfc ✓ cloudpickle ✗ webencodings ✓ sentry-sdk ✗ stack-data ✗ pure-eval ✗ azure-storage-blob ✗ google-cloud-dlp ✓ lmnr ✓ sqlparse ✗ fastmcp ✓ asgiref ✗ grpc-google-iam-v1 ✗ tornado ✗ black ✓ google-cloud-texttospeech ✓ narwhals ✓ babel ✗ google-cloud-speech ✓ kubernetes ✓ databricks-sdk ✓ pytest-xdist ✗ tree-sitter ✓ gunicorn ✓ termcolor ✓ cachecontrol ✓ opentelemetry-instrumentation-threading ✓ pandas-stubs ✓ marshmallow ✓ cython ✗ datasets ✓ execnet ✗ google-cloud-pubsub ✓ types-requests ✓ python-json-logger ✓ jsonpatch ✗ pytest-timeout ✗ setuptools-scm ✓ xmltodict ✗ pymongo ✗ tinycss2 ✓ databricks-sql-connector ✗ py4j ✗ asyncpg ✗ dbt-adapters ✓ debugpy ✗ pyzmq ✗ markdown ✓ pyperclip ✗ librt ✗ aioitertools ✓ jsonschema-path ✓ dulwich ✓ dbt-core ✓ watchdog ✗ snowflake-snowpark-python ✓ google-cloud-tasks ✓ xlsxwriter ✗ pypdf ✗ pkginfo ✗ backports-zstd ✓ isort ✓ google-cloud-monitoring ✓ google-cloud-logging ✓ lz4 ✗ python-docx ✗ importlib-resources ✓ llama-cloud-services ✓ llama-parse ✓ jupyter-core ✓ pathable ✓ vcs-versioning ✓ langsmith ✓ cyclopts ✓ pytest-mock ✗ beartype ✓ opentelemetry-exporter-prometheus ✓ flatbuffers ✓ structlog ✓ nest-asyncio ✗ typedload ✓ jsonref ✓ jupyter-client ✓ fastuuid ✗ mdit-py-plugins ✗ psycopg ✓ google-cloud-bigtable ✓ google-cloud-vision ✓ poetry ✓ pymysql ✓ sphinx ✓ torch ✓

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.