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

Top 120 - 240

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

Top 240 - 360

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

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.