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

Top 120 - 240

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

Top 240 - 360

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

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.