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

Top 120 - 240

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

Top 240 - 360

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

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.