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

Top 120 - 240

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

Top 240 - 360

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

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.