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

Top 120 - 240

mypy-extensions ✗ msgpack ✓ openai ✗ werkzeug ✓ websocket-client ✗ pyopenssl ✗ google-cloud-storage ✗ coverage ✓ langchain ✓ dnspython ✓ networkx ✓ opentelemetry-exporter-otlp-proto-http ✗ flask ✓ pydantic-settings ✓ distro ✗ pynacl ✗ psycopg2-binary ✗ python-multipart ✓ wcwidth ✗ tabulate ✓ opentelemetry-exporter-otlp-proto-grpc ✗ fonttools ✓ scikit-learn ✓ textual ✗ isodate ✗ sortedcontainers ✓ huggingface-hub ✗ decorator ✗ opentelemetry-exporter-otlp-proto-common ✗ keyring ✓ matplotlib ✓ joblib ✗ jiter ✗ smmap ✗ ruff ✗ azure-identity ✗ kiwisolver ✓ jaraco-classes ✓ redis ✓ yandexcloud ✗ secretstorage ✓ jeepney ✓ editables ✗ azure-core ✗ bcrypt ✗ watchfiles ✗ jaraco-context ✓ gitpython ✗ types-requests ✓ opentelemetry-instrumentation ✗ threadpoolctl ✗ msal ✗ python-discovery ✗ itsdangerous ✓ poetry-core ✓ contourpy ✓ defusedxml ✗ google-cloud-core ✗ jaraco-functools ✓ ruamel-yaml ✗ pexpect ✓ zstandard ✗ ptyprocess ✓ prompt-toolkit ✗ async-timeout ✓ alembic ✓ rapidfuzz ✓ snowflake-connector-python ✗ pytest-cov ✗ orjson ✓ email-validator ✗ deprecated ✗ mcp ✓ gitdb ✗ pytest-asyncio ✓ blinker ✓ google-crc32c ✓ google-resumable-media ✗ opentelemetry-exporter-otlp ✗ tzlocal ✗ docstring-parser ✗ pydantic-ai-slim ✓ docker ✗ cycler ✗ google-api-python-client ✗ asn1crypto ✗ pyproject-hooks ✓ chardet ✓ uv ✗ sympy ✗ paramiko ✗ mako ✗ kubernetes ✗ prometheus-client ✗ backoff ✗ dill ✗ build ✗ marshmallow ✓ hf-xet ✗ uritemplate ✓ fastjsonschema ✗ google-auth-oauthlib ✗ sse-starlette ✓ mpmath ✗ google-cloud-bigquery ✗ setuptools-scm ✗ tokenizers ✗ httplib2 ✓ google-auth-httplib2 ✗ uvloop ✗ mypy ✗ sqlparse ✗ msal-extensions ✗ tiktoken ✓ gcsfs ✓ babel ✗ ipython ✓ google-cloud-secret-manager ✗ jsonpointer ✗ nodeenv ✗

Top 240 - 360

transformers ✓ google-cloud-batch ✗ azure-storage-blob ✗ opentelemetry-util-http ✗ aiofiles ✗ black ✓ pydantic-graph ✓ xmltodict ✗ opentelemetry-instrumentation-requests ✗ httpx-sse ✗ google-analytics-admin ✗ httptools ✓ toml ✗ tornado ✗ asgiref ✗ cloudpickle ✗ gunicorn ✓ pre-commit ✓ sentry-sdk ✗ databricks-sdk ✗ traitlets ✓ parso ✗ executing ✗ authlib ✗ identify ✓ aliyun-python-sdk-core ✗ jedi ✗ asttokens ✗ pytest-xdist ✗ cython ✗ cfgv ✓ grpcio-health-checking ✗ py4j ✗ importlib-resources ✓ grpc-google-iam-v1 ✗ matplotlib-inline ✗ execnet ✗ pandas-stubs ✓ markdown ✓ langchain-core ✓ cachecontrol ✓ webencodings ✓ stack-data ✗ pure-eval ✗ python-json-logger ✗ xxhash ✗ typing-inspect ✗ jsonpatch ✗ litellm ✗ nest-asyncio ✗ dbt-core ✓ durationpy ✓ h2 ✗ pymongo ✗ hyperframe ✗ isort ✓ hpack ✗ termcolor ✓ watchdog ✗ typedload ✓ jsonschema-path ✓ pkginfo ✗ pytest-mock ✗ debugpy ✗ dulwich ✓ aioitertools ✓ awswrangler ✓ dbt-adapters ✓ dataclasses-json ✗ pymysql ✓ rich-toolkit ✓ multiprocess ✗ slack-sdk ✗ pyzmq ✗ jsonpath-ng ✓ dbt-common ✓ databricks-sql-connector ✗ pygithub ✗ anthropic ✗ sphinx ✓ poetry ✓ cattrs ✓ pycryptodome ✗ ruamel-yaml-clib ✗ pathable ✓ google-cloud-speech ✗ msrest ✗ google-cloud-vision ✗ lz4 ✗ torch ✓ google-cloud-monitoring ✗ mccabe ✗ semver ✗ google-cloud-compute ✗ langsmith ✓ google-cloud-kms ✗ rfc3339-validator ✓ pyperclip ✗ smart-open ✓ google-cloud-tasks ✗ installer ✓ cleo ✗ deepdiff ✗ librt ✗ google-cloud-workflows ✗ google-cloud-dlp ✗ tinycss2 ✓ crashtest ✗ narwhals ✗ google-cloud-bigtable ✗ sqlalchemy-bigquery ✗ google-cloud-videointelligence ✗ google-cloud-language ✗ invoke ✗ pendulum ✗ backports-tarfile ✓ opentelemetry-exporter-prometheus ✗ arrow ✗ argcomplete ✗ future ✗

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.