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

Top 120 - 240

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

Top 240 - 360

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

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.