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. 101 green packages (28.1%) have dropped support for Python 3.9;
  2. 259 uncolored packages (71.9%) 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 ✗ urllib3 ✗ typing-extensions ✗ botocore ✗ certifi ✗ aiobotocore ✗ requests ✗ idna ✗ charset-normalizer ✗ setuptools ✓ grpcio-status ✗ packaging ✗ python-dateutil ✗ numpy ✓ s3transfer ✗ six ✓ cryptography ✗ s3fs ✗ pydantic ✗ fsspec ✗ awscli ✗ pyyaml ✗ cffi ✗ pandas ✗ click ✓ pydantic-core ✗ pycparser ✗ pip ✗ protobuf ✗ attrs ✗ pygments ✗ h11 ✗ anyio ✗ markupsafe ✓ annotated-types ✗ sniffio ✓ rsa ✗ jmespath ✗ pluggy ✗ platformdirs ✓ pytz ✗ jinja2 ✓ importlib-metadata ✓ pyasn1 ✗ typing-inspection ✗ cachetools ✗ wheel ✗ tzdata ✓ zipp ✓ google-auth ✗ filelock ✓ pytest ✓ httpx ✗ httpcore ✗ google-api-core ✗ pyjwt ✗ rich ✗ colorama ✗ aiohttp ✗ iniconfig ✓ pyasn1-modules ✗ yandexcloud ✗ markdown-it-py ✓ jsonschema ✗ multidict ✗ yarl ✗ python-dotenv ✗ googleapis-common-protos ✗ grpcio-tools ✓ pyarrow ✓ mdurl ✗ tqdm ✗ opentelemetry-proto ✗ opentelemetry-sdk ✗ virtualenv ✗ scipy ✓ frozenlist ✗ tomli ✓ wrapt ✗ starlette ✓ aiosignal ✓ uvicorn ✗ sqlalchemy ✗ propcache ✗ rpds-py ✓ pillow ✓ referencing ✓ psutil ✓ requests-oauthlib ✗ greenlet ✗ pathspec ✗ google-genai ✓ grpcio ✗ jsonschema-specifications ✗ opentelemetry-exporter-otlp-proto-http ✗ fastapi ✗ opentelemetry-exporter-otlp-proto-grpc ✗ pyparsing ✗ aiohappyeyeballs ✗ openpyxl ✗ et-xmlfile ✗ lxml ✗ oauthlib ✗ beautifulsoup4 ✓ trove-classifiers ✓ tomlkit ✗ soupsieve ✗ opentelemetry-exporter-otlp-proto-common ✗ docutils ✗ opentelemetry-exporter-otlp ✗ pyopenssl ✗ exceptiongroup ✓ flask ✓ requests-toolbelt ✗ distlib ✗ isodate ✗ werkzeug ✓ pexpect ✓ ptyprocess ✓ opentelemetry-api ✗

Top 120 - 240

google-cloud-storage ✗ snowflake-connector-python ✗ pynacl ✗ more-itertools ✗ regex ✗ proto-plus ✗ msgpack ✓ psycopg2-binary ✗ tenacity ✗ opentelemetry-semantic-conventions ✗ websocket-client ✗ shellingham ✗ mypy-extensions ✗ python-multipart ✗ scikit-learn ✓ coverage ✓ decorator ✗ azure-core ✗ azure-identity ✗ networkx ✓ sortedcontainers ✓ annotated-doc ✗ async-timeout ✓ msal ✗ dnspython ✓ websockets ✗ bcrypt ✗ wcwidth ✗ gitpython ✗ huggingface-hub ✗ asn1crypto ✗ threadpoolctl ✗ google-cloud-core ✗ joblib ✗ openai ✗ matplotlib ✓ smmap ✗ gitdb ✗ deprecated ✗ hatchling ✓ tabulate ✗ keyring ✓ google-resumable-media ✗ itsdangerous ✓ paramiko ✗ google-cloud-bigquery ✗ fonttools ✗ google-crc32c ✗ distro ✗ cloudpickle ✗ ruamel-yaml ✗ chardet ✗ redis ✓ prompt-toolkit ✗ alembic ✓ kiwisolver ✓ pydantic-settings ✓ blinker ✓ google-api-python-client ✗ google-cloud-batch ✗ transformers ✗ secretstorage ✓ backoff ✗ zstandard ✗ dill ✗ poetry-core ✗ jaraco-classes ✓ setuptools-scm ✗ langsmith ✓ google-cloud-secret-manager ✗ google-auth-oauthlib ✗ jeepney ✓ cycler ✗ rapidfuzz ✓ fastjsonschema ✗ typer ✗ msal-extensions ✗ google-analytics-admin ✗ contourpy ✓ grpcio-health-checking ✗ aliyun-python-sdk-core ✗ defusedxml ✗ pyzmq ✗ jiter ✗ build ✗ uritemplate ✓ orjson ✗ pyproject-hooks ✓ tzlocal ✗ google-auth-httplib2 ✗ azure-storage-blob ✗ ruff ✗ httplib2 ✓ pytest-cov ✗ py4j ✗ ruamel-yaml-clib ✗ tokenizers ✗ jaraco-functools ✓ langchain ✓ docker ✗ jaraco-context ✓ marshmallow ✓ xmltodict ✗ sqlparse ✗ prometheus-client ✗ importlib-resources ✓ email-validator ✗ ipython ✓ tritonclient ✓ sympy ✗ mako ✗ argcomplete ✗ black ✗ awswrangler ✗ cython ✗ types-requests ✓ hf-xet ✗ jsonpointer ✗ traitlets ✓ babel ✗

Top 240 - 360

uv ✗ nest-asyncio ✗ jedi ✗ parso ✗ mpmath ✗ aiofiles ✗ tornado ✗ typedload ✓ opentelemetry-instrumentation ✗ sphinx ✓ kubernetes ✗ snowflake-sqlalchemy ✗ toml ✗ matplotlib-inline ✗ pytest-asyncio ✓ editables ✗ executing ✗ asttokens ✗ pymongo ✗ torch ✓ grpc-google-iam-v1 ✗ termcolor ✓ ply ✓ mypy ✗ sentry-sdk ✗ webencodings ✓ langchain-core ✓ markdown ✓ pymysql ✓ gunicorn ✗ cachecontrol ✓ aioitertools ✓ stack-data ✗ pymupdf ✓ pure-eval ✗ watchfiles ✗ docstring-parser ✗ uvloop ✗ dbt-core ✗ pkginfo ✗ nodeenv ✗ typing-inspect ✗ bashlex ✓ google-cloud-vision ✗ google-cloud-kms ✗ swe-rex ✓ google-cloud-tasks ✗ google-cloud-monitoring ✗ google-cloud-speech ✗ google-cloud-dlp ✗ google-cloud-compute ✗ pypandoc-binary ✗ databricks-sdk ✗ asgiref ✗ pytest-xdist ✗ pre-commit ✓ google-cloud-workflows ✗ cfgv ✓ jsonpatch ✗ mccabe ✗ tiktoken ✓ shapely ✓ google-cloud-language ✗ multiprocess ✗ isort ✓ dbt-common ✓ execnet ✗ msrest ✗ dbt-adapters ✓ identify ✓ httptools ✓ google-cloud-dataform ✗ opentelemetry-util-http ✗ python-json-logger ✗ google-cloud-videointelligence ✗ jsonpath-ng ✗ debugpy ✗ pycodestyle ✓ google-cloud-os-login ✗ smart-open ✗ watchdog ✗ azure-common ✗ mcp ✓ pycryptodome ✗ dulwich ✗ google-cloud-redis ✗ rfc3339-validator ✓ scramp ✗ pendulum ✗ httpx-sse ✗ future ✗ slack-sdk ✗ poetry ✗ textual ✗ databricks-sql-connector ✗ datadog ✗ google-cloud-memcache ✗ notebook ✗ google-cloud-logging ✗ requests-file ✓ cattrs ✗ backports-tarfile ✓ jupyter-core ✓ opensearch-py ✓ lz4 ✗ crashtest ✗ opentelemetry-instrumentation-requests ✗ installer ✓ tinycss2 ✓ cleo ✗ ipykernel ✓ invoke ✗ safetensors ✗ google-cloud-bigtable ✗ opentelemetry-exporter-prometheus ✗ dataclasses-json ✗ userpath ✗ pygithub ✗ nvidia-nccl-cu12 ✗ arrow ✗

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.