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

Top 120 - 240

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

Top 240 - 360

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

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.