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

Top 120 - 240

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

Top 240 - 360

toml ✗ editables ✗ hf-xet ✗ mypy ✗ traitlets ✓ aiofiles ✗ pre-commit ✓ mpmath ✗ cfgv ✓ jedi ✗ identify ✓ email-validator ✗ parso ✗ nest-asyncio ✗ argcomplete ✗ matplotlib-inline ✗ executing ✗ pymupdf ✓ grpc-google-iam-v1 ✗ asttokens ✗ awswrangler ✗ asgiref ✗ langchain-core ✓ ply ✓ cachecontrol ✓ typing-inspect ✗ pyzmq ✗ webencodings ✓ watchfiles ✗ gunicorn ✗ sentry-sdk ✗ docstring-parser ✗ opentelemetry-util-http ✗ pkginfo ✗ markdown ✓ pymongo ✗ stack-data ✗ pandas-stubs ✓ pure-eval ✗ aioitertools ✓ uvloop ✗ sphinx ✓ tiktoken ✓ termcolor ✓ pymysql ✓ pytest-xdist ✗ dbt-core ✗ python-json-logger ✗ execnet ✗ torch ✓ msrest ✗ jsonpatch ✗ mccabe ✗ isort ✓ opentelemetry-instrumentation-requests ✗ watchdog ✗ httptools ✓ shapely ✓ google-cloud-vision ✗ dbt-common ✓ snowflake-sqlalchemy ✗ databricks-sdk ✗ durationpy ✓ google-cloud-kms ✗ debugpy ✗ textual ✗ dulwich ✗ multiprocess ✗ dbt-adapters ✓ google-cloud-monitoring ✗ datasets ✗ pycryptodome ✗ google-cloud-speech ✗ google-cloud-tasks ✗ poetry ✗ opentelemetry-exporter-prometheus ✗ pycodestyle ✓ mcp ✓ google-cloud-dlp ✗ google-cloud-compute ✗ pytest-mock ✗ slack-sdk ✗ google-cloud-workflows ✗ notebook ✗ jsonpath-ng ✗ google-cloud-language ✗ databricks-sql-connector ✗ crashtest ✗ installer ✓ azure-common ✗ datadog ✗ cleo ✗ dataclasses-json ✗ httpx-sse ✗ google-cloud-dataform ✗ smart-open ✗ cattrs ✗ google-cloud-videointelligence ✗ h2 ✗ requests-file ✓ lz4 ✗ future ✗ hyperframe ✗ scramp ✗ google-cloud-os-login ✗ semver ✗ deepdiff ✗ backports-tarfile ✓ hpack ✗ pygithub ✗ pendulum ✗ arrow ✗ rfc3339-validator ✓ botocore-stubs ✗ google-cloud-bigtable ✗ typeguard ✗ jupyter-core ✓ opensearch-py ✓ types-awscrt ✗ google-cloud-redis ✗

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.