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

Top 120 - 240

pyopenssl ✗ proto-plus ✗ hatchling ✓ typer ✓ flask ✓ pynacl ✗ websockets ✓ opentelemetry-exporter-otlp-proto-http ✗ werkzeug ✓ mypy-extensions ✗ sortedcontainers ✓ psycopg2-binary ✗ coverage ✓ isodate ✗ decorator ✗ msgpack ✓ azure-identity ✗ huggingface-hub ✗ dnspython ✓ azure-core ✗ wcwidth ✗ openai ✗ textual ✗ networkx ✓ pydantic-settings ✓ snowflake-connector-python ✗ redis ✓ opentelemetry-exporter-otlp-proto-common ✗ msal ✗ scikit-learn ✓ distro ✗ python-multipart ✓ opentelemetry-exporter-otlp ✗ pexpect ✓ ptyprocess ✓ joblib ✗ bcrypt ✗ poetry-core ✓ gitpython ✗ types-requests ✓ google-cloud-core ✗ keyring ✓ matplotlib ✓ async-timeout ✓ fonttools ✓ ruamel-yaml ✗ tabulate ✗ kubernetes ✗ alembic ✓ asn1crypto ✗ itsdangerous ✓ threadpoolctl ✗ jiter ✗ ruff ✗ jaraco-classes ✓ secretstorage ✓ kiwisolver ✓ jeepney ✓ prompt-toolkit ✗ google-crc32c ✓ google-resumable-media ✗ prometheus-client ✗ smmap ✗ deprecated ✗ backoff ✗ gitdb ✗ opentelemetry-instrumentation ✗ paramiko ✗ zstandard ✗ blinker ✓ google-cloud-aiplatform ✗ chardet ✗ tzlocal ✗ pytest-cov ✗ editables ✗ jaraco-context ✓ rapidfuzz ✓ google-api-python-client ✗ orjson ✓ jaraco-functools ✓ pytest-asyncio ✓ defusedxml ✗ pyproject-hooks ✓ contourpy ✓ msal-extensions ✗ cycler ✗ build ✗ google-cloud-bigquery ✗ dill ✗ email-validator ✗ cloudpickle ✗ fastjsonschema ✗ google-auth-oauthlib ✗ mako ✗ gcsfs ✓ azure-storage-blob ✗ uritemplate ✓ httplib2 ✓ google-auth-httplib2 ✗ google-cloud-secret-manager ✗ setuptools-scm ✗ marshmallow ✓ docker ✗ google-cloud-batch ✗ transformers ✓ nodeenv ✗ ipython ✓ babel ✗ durationpy ✓ sqlparse ✗ tokenizers ✗ aliyun-python-sdk-core ✗ uv ✗ watchfiles ✗ opentelemetry-exporter-prometheus ✗ parso ✗ pre-commit ✓ aiofiles ✗ py4j ✗ traitlets ✓

Top 240 - 360

grpcio-health-checking ✗ hf-xet ✗ python-json-logger ✗ google-analytics-admin ✗ docstring-parser ✗ jedi ✗ jsonpointer ✗ identify ✓ sympy ✗ xmltodict ✗ tornado ✗ mypy ✗ uvloop ✗ black ✓ cfgv ✓ opentelemetry-util-http ✗ matplotlib-inline ✗ importlib-resources ✓ opentelemetry-instrumentation-requests ✗ executing ✗ mpmath ✗ cython ✗ gunicorn ✓ nest-asyncio ✗ asttokens ✗ tiktoken ✓ dbt-core ✓ asgiref ✗ awswrangler ✓ grpc-google-iam-v1 ✗ toml ✗ ply ✓ httptools ✓ langchain-core ✓ mcp ✓ pandas-stubs ✓ markdown ✓ stack-data ✗ pure-eval ✗ cachecontrol ✓ pymongo ✗ sentry-sdk ✗ termcolor ✓ webencodings ✓ pytest-xdist ✗ litellm ✗ databricks-sdk ✗ typer-slim ✓ execnet ✗ httpx-sse ✗ pymysql ✓ aioitertools ✓ sse-starlette ✗ typedload ✓ pkginfo ✗ debugpy ✗ watchdog ✗ authlib ✗ jsonpatch ✗ typing-inspect ✗ msrest ✗ croniter ✗ dbt-adapters ✓ isort ✓ pyzmq ✗ jsonpath-ng ✗ dulwich ✓ h2 ✗ ruamel-yaml-clib ✗ hyperframe ✗ snowflake-sqlalchemy ✗ hpack ✗ xxhash ✗ pycryptodome ✗ pytest-mock ✗ tree-sitter ✓ dbt-common ✓ poetry ✓ lz4 ✗ mccabe ✗ pendulum ✗ rich-toolkit ✓ slack-sdk ✗ sphinx ✓ torch ✓ google-cloud-monitoring ✗ google-cloud-speech ✗ google-cloud-bigtable ✗ google-cloud-vision ✗ argcomplete ✗ azure-common ✗ google-cloud-kms ✗ databricks-sql-connector ✗ notebook ✗ jupyter-core ✓ dataclasses-json ✗ google-cloud-tasks ✗ pygithub ✗ google-cloud-compute ✗ ipykernel ✓ google-cloud-logging ✗ google-cloud-dlp ✗ datadog ✗ cleo ✗ arrow ✗ installer ✓ deepdiff ✗ loguru ✗ smart-open ✗ crashtest ✗ google-cloud-videointelligence ✗ google-cloud-language ✗ pycodestyle ✓ google-cloud-workflows ✗ jupyter-client ✓ rfc3339-validator ✓ invoke ✗ multiprocess ✗ types-awscrt ✗ numba ✓

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.