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

Top 120 - 240

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

Top 240 - 360

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

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.