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

Top 120 - 240

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

Top 240 - 360

executing ✗ google-auth-oauthlib ✗ xxhash ✗ backoff ✗ google-auth-httplib2 ✗ google-cloud-aiplatform ✗ pytest-xdist ✗ transformers ✓ matplotlib-inline ✗ marshmallow ✓ jsonpointer ✓ sqlparse ✗ pytest-json-ctrf ✓ asttokens ✗ opentelemetry-util-http ✗ opentelemetry-instrumentation-requests ✗ h2 ✗ httplib2 ✓ execnet ✗ hyperframe ✗ hpack ✗ tornado ✗ grpc-google-iam-v1 ✗ babel ✗ cloudpickle ✗ pure-eval ✗ stack-data ✗ msal-extensions ✗ aiofiles ✗ durationpy ✓ gunicorn ✓ pyee ✗ vcs-versioning ✓ cython ✗ google-cloud-secret-manager ✗ asgiref ✗ authlib ✓ azure-storage-blob ✗ markdown ✓ datasets ✓ xmltodict ✗ webencodings ✓ playwright ✗ sentry-sdk ✗ termcolor ✓ nest-asyncio ✗ black ✓ weaviate-client ✓ py4j ✗ tree-sitter-languages ✓ databricks-sdk ✓ anthropic ✗ google-cloud-batch ✗ python-json-logger ✓ importlib-resources ✓ cachecontrol ✓ debugpy ✗ langchain-core ✓ ujson ✓ jsonpatch ✗ librt ✗ google-analytics-admin ✗ dbt-core ✓ joserfc ✗ typing-inspect ✗ pyzmq ✗ watchdog ✗ awswrangler ✓ pymongo ✗ gcsfs ✓ google-cloud-compute ✗ google-cloud-kms ✗ dbt-adapters ✓ pytest-mock ✗ aioitertools ✓ ydb ✗ dulwich ✓ jsonschema-path ✓ tinycss2 ✓ databricks-sql-connector ✗ pkginfo ✗ lz4 ✗ isort ✓ pycryptodome ✗ slack-sdk ✗ jupyter-core ✓ pymysql ✓ google-cloud-pubsub ✗ narwhals ✗ pathable ✓ flatbuffers ✓ pandas-stubs ✓ dataclasses-json ✗ dacite ✗ rfc3339-validator ✓ deepdiff ✓ google-cloud-dlp ✗ mccabe ✗ torch ✓ grpcio-health-checking ✗ ipykernel ✓ jupyter-client ✓ poetry ✓ invoke ✗ msrest ✗ langsmith ✓ google-cloud-speech ✗ pyperclip ✗ types-pyyaml ✓ pygithub ✗ loguru ✗ dbt-common ✓ cyclopts ✓ typedload ✓ iso8601 ✗ semver ✗ safetensors ✗ structlog ✗ xlsxwriter ✗ 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.