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

Top 120 - 240

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

Top 240 - 360

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

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.