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

Top 120 - 240

more-itertools ✓ openpyxl ✗ tomlkit ✗ et-xmlfile ✗ werkzeug ✓ ptyprocess ✓ opentelemetry-proto ✗ huggingface-hub ✓ pexpect ✓ multiprocess ✗ grpcio-tools ✓ gitpython ✗ google-cloud-storage ✓ wcwidth ✗ watchfiles ✗ editables ✗ networkx ✓ decorator ✗ docker ✗ matplotlib ✓ fonttools ✓ mypy-extensions ✗ smmap ✗ textual ✗ msgpack ✓ pyopenssl ✗ langchain ✓ python-discovery ✗ opentelemetry-exporter-otlp-proto-http ✗ coverage ✓ dnspython ✓ mcp ✓ kiwisolver ✓ psycopg2-binary ✗ tabulate ✓ scikit-learn ✓ pynacl ✗ sortedcontainers ✓ gitdb ✗ prompt-toolkit ✗ contourpy ✓ docstring-parser ✗ flask ✓ sse-starlette ✓ google-cloud-core ✗ itsdangerous ✓ google-genai ✓ opentelemetry-instrumentation ✗ redis ✓ joblib ✗ hf-xet ✗ kubernetes ✗ dill ✗ opentelemetry-exporter-otlp-proto-common ✗ ruff ✗ cycler ✗ async-timeout ✓ isodate ✗ opentelemetry-exporter-otlp-proto-grpc ✗ threadpoolctl ✗ google-crc32c ✓ blinker ✓ google-resumable-media ✗ bcrypt ✗ keyring ✓ orjson ✓ chardet ✓ pydantic-ai-slim ✓ azure-identity ✗ jaraco-classes ✓ tzlocal ✗ azure-core ✓ tokenizers ✓ ipython ✓ secretstorage ✓ jeepney ✓ pytest-cov ✗ alembic ✓ zstandard ✗ msal ✗ defusedxml ✗ nodeenv ✗ xxhash ✗ toml ✗ pytest-asyncio ✓ jaraco-context ✓ snowflake-connector-python ✗ ruamel-yaml ✗ deprecated ✗ tiktoken ✓ uvloop ✗ jaraco-functools ✓ traitlets ✓ httpx-sse ✗ parso ✗ durationpy ✓ setuptools-scm ✓ transformers ✓ executing ✗ jedi ✗ identify ✓ pre-commit ✓ email-validator ✗ mako ✗ prometheus-client ✗ google-cloud-bigquery ✗ cfgv ✓ pytest-json-ctrf ✓ asttokens ✗ google-api-python-client ✗ matplotlib-inline ✗ httptools ✓ google-cloud-aiplatform ✓ rapidfuzz ✓ uv ✗ sympy ✗ pure-eval ✗ stack-data ✗ asn1crypto ✗ types-requests ✓

Top 240 - 360

h2 ✗ google-auth-oauthlib ✗ uritemplate ✓ hyperframe ✗ hpack ✗ paramiko ✗ google-auth-httplib2 ✗ mpmath ✗ grpc-google-iam-v1 ✗ cloudpickle ✗ datasets ✓ poetry-core ✓ pyproject-hooks ✓ sqlparse ✗ opentelemetry-instrumentation-requests ✗ tree-sitter ✓ httplib2 ✓ mypy ✓ fastjsonschema ✗ databricks-sql-connector ✗ build ✓ jsonpointer ✓ opentelemetry-util-http ✗ backoff ✗ aiofiles ✗ vcs-versioning ✓ opentelemetry-exporter-otlp ✗ termcolor ✓ tornado ✗ marshmallow ✓ babel ✗ anthropic ✗ markdown ✓ msal-extensions ✗ google-cloud-secret-manager ✗ cython ✗ asgiref ✗ azure-storage-blob ✗ gunicorn ✓ pytest-xdist ✗ webencodings ✓ py4j ✗ nest-asyncio ✗ execnet ✗ sentry-sdk ✗ xmltodict ✗ google-cloud-batch ✗ weaviate-client ✓ python-json-logger ✓ authlib ✓ databricks-sdk ✓ pyzmq ✗ black ✓ debugpy ✗ tree-sitter-languages ✓ importlib-resources ✓ dbt-core ✓ cachecontrol ✓ ydb ✗ langchain-core ✓ jsonpatch ✗ awswrangler ✓ gcsfs ✓ google-analytics-admin ✗ google-cloud-compute ✗ pymongo ✗ watchdog ✗ typing-inspect ✗ google-cloud-kms ✗ librt ✗ safetensors ✗ tinycss2 ✓ pytest-mock ✗ joserfc ✗ lz4 ✗ dulwich ✓ cyclopts ✓ aioitertools ✓ google-cloud-pubsub ✗ jupyter-core ✓ cbor2 ✓ flatbuffers ✓ torch ✓ narwhals ✗ dbt-adapters ✓ jsonschema-path ✓ jupyter-client ✓ ipykernel ✓ rich-rst ✗ types-pyyaml ✓ google-cloud-dlp ✗ pymysql ✓ slack-sdk ✗ pymupdf ✓ google-cloud-speech ✗ pycryptodome ✗ rfc3339-validator ✓ pkginfo ✗ isort ✓ comm ✓ msrest ✗ deepdiff ✓ arrow ✗ google-cloud-resource-manager ✗ pyee ✗ shapely ✓ xlsxwriter ✗ langsmith ✓ pydantic-graph ✓ invoke ✗ dbt-common ✓ ipython-pygments-lexers ✓ asyncpg ✗ dataclasses-json ✗ loguru ✗ types-toml ✓ google-cloud-texttospeech ✗ lark ✓ pathable ✓ structlog ✗

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.