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

Top 120 - 240

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

Top 240 - 360

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

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.