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

Top 120 - 240

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

Top 240 - 360

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

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.