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

Top 120 - 240

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

Top 240 - 360

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

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.