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

Top 120 - 240

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

Top 240 - 360

fastjsonschema ✗ transformers ✓ identify ✓ durationpy ✓ traitlets ✓ msal-extensions ✗ parso ✗ pre-commit ✓ databricks-sdk ✗ mypy ✓ cfgv ✓ jedi ✗ gunicorn ✓ opentelemetry-instrumentation-requests ✗ executing ✗ google-cloud-secret-manager ✗ opentelemetry-util-http ✗ jsonpointer ✓ grpc-google-iam-v1 ✗ xxhash ✗ asttokens ✗ azure-storage-blob ✗ babel ✗ aiofiles ✗ google-cloud-batch ✗ matplotlib-inline ✗ pytest-xdist ✗ h2 ✗ tornado ✗ cython ✗ hyperframe ✗ hpack ✗ termcolor ✓ pure-eval ✗ stack-data ✗ black ✓ execnet ✗ google-analytics-admin ✗ xmltodict ✗ langchain-core ✓ asgiref ✗ py4j ✗ importlib-resources ✓ weaviate-client ✓ authlib ✗ vcs-versioning ✓ markdown ✓ python-json-logger ✓ sentry-sdk ✗ webencodings ✓ nest-asyncio ✗ cachecontrol ✓ dbt-core ✓ anthropic ✗ typing-inspect ✗ datasets ✓ tree-sitter-languages ✓ grpcio-health-checking ✗ pymongo ✗ jsonpatch ✗ pandas-stubs ✓ dbt-adapters ✓ gcsfs ✓ watchdog ✗ aioitertools ✓ debugpy ✗ pymysql ✓ pydantic-graph ✓ awswrangler ✓ google-cloud-compute ✗ jsonschema-path ✓ databricks-sql-connector ✗ dulwich ✓ pytest-mock ✗ pyzmq ✗ google-cloud-kms ✗ jsonpath-ng ✓ dataclasses-json ✗ typedload ✓ torch ✓ pytest-json-ctrf ✓ pkginfo ✗ pycryptodome ✗ slack-sdk ✗ msrest ✗ lz4 ✗ isort ✓ dbt-common ✓ deepdiff ✓ flatbuffers ✓ pyperclip ✗ langsmith ✓ narwhals ✗ rich-toolkit ✓ google-cloud-monitoring ✗ google-cloud-speech ✗ google-cloud-dlp ✗ pygithub ✗ pymupdf ✓ pathable ✓ librt ✗ mccabe ✗ poetry ✓ tinycss2 ✓ notebook ✗ sphinx ✓ loguru ✗ ruamel-yaml-clib ✗ pendulum ✗ invoke ✗ rfc3339-validator ✓ google-cloud-tasks ✗ smart-open ✓ xlsxwriter ✗ semver ✗ google-cloud-vision ✗ google-cloud-bigtable ✗ structlog ✗ cattrs ✓ argcomplete ✗

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.