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

Top 120 - 240

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

Top 240 - 360

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

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.