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

Top 120 - 240

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

Top 240 - 360

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

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.