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

Top 120 - 240

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

Top 240 - 360

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

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.