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

Top 120 - 240

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

Top 240 - 360

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

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.