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

Top 120 - 240

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

Top 240 - 360

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

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.