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

Top 120 - 240

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

Top 240 - 360

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

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.