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

Top 120 - 240

pyopenssl ✗ proto-plus ✗ hatchling ✓ typer ✓ flask ✓ pynacl ✗ websockets ✓ werkzeug ✓ sortedcontainers ✓ mypy-extensions ✗ opentelemetry-exporter-otlp-proto-http ✗ psycopg2-binary ✗ coverage ✓ isodate ✗ decorator ✗ huggingface-hub ✗ dnspython ✓ azure-identity ✗ msgpack ✓ openai ✗ azure-core ✗ wcwidth ✗ textual ✗ networkx ✓ snowflake-connector-python ✗ redis ✓ python-multipart ✓ pydantic-settings ✓ msal ✗ distro ✗ opentelemetry-exporter-otlp-proto-common ✗ scikit-learn ✓ pexpect ✓ ptyprocess ✓ opentelemetry-exporter-otlp ✗ bcrypt ✗ joblib ✗ keyring ✓ gitpython ✗ google-cloud-core ✗ poetry-core ✓ matplotlib ✓ async-timeout ✓ types-requests ✓ fonttools ✓ kubernetes ✗ ruamel-yaml ✗ tabulate ✗ jiter ✗ asn1crypto ✗ itsdangerous ✓ alembic ✓ jaraco-classes ✓ secretstorage ✓ threadpoolctl ✗ ruff ✗ kiwisolver ✓ jeepney ✓ google-crc32c ✓ prompt-toolkit ✗ prometheus-client ✗ google-resumable-media ✗ smmap ✗ deprecated ✗ opentelemetry-instrumentation ✗ gitdb ✗ backoff ✗ paramiko ✗ zstandard ✗ blinker ✓ jaraco-context ✓ rapidfuzz ✓ tzlocal ✗ chardet ✗ jaraco-functools ✓ pytest-cov ✗ editables ✗ google-api-python-client ✗ defusedxml ✗ orjson ✓ pytest-asyncio ✓ pyproject-hooks ✓ google-cloud-aiplatform ✗ contourpy ✓ msal-extensions ✗ email-validator ✗ build ✗ cloudpickle ✗ dill ✗ cycler ✗ fastjsonschema ✗ google-cloud-bigquery ✗ google-auth-oauthlib ✗ azure-storage-blob ✗ mako ✗ gcsfs ✓ docker ✗ marshmallow ✓ uritemplate ✓ google-auth-httplib2 ✗ httplib2 ✓ google-cloud-secret-manager ✗ durationpy ✓ setuptools-scm ✗ nodeenv ✗ transformers ✓ google-cloud-batch ✗ babel ✗ ipython ✓ sqlparse ✗ tokenizers ✗ uv ✗ pre-commit ✓ aiofiles ✗ watchfiles ✗ aliyun-python-sdk-core ✗ python-json-logger ✗ parso ✗ opentelemetry-exporter-prometheus ✗ py4j ✗

Top 240 - 360

docstring-parser ✗ traitlets ✓ identify ✓ hf-xet ✗ grpcio-health-checking ✗ google-analytics-admin ✗ jsonpointer ✗ xmltodict ✗ jedi ✗ sympy ✗ cfgv ✓ tornado ✗ uvloop ✗ mypy ✗ black ✓ opentelemetry-util-http ✗ opentelemetry-instrumentation-requests ✗ importlib-resources ✓ matplotlib-inline ✗ gunicorn ✓ cython ✗ mpmath ✗ executing ✗ nest-asyncio ✗ tiktoken ✓ asgiref ✗ asttokens ✗ awswrangler ✓ dbt-core ✓ grpc-google-iam-v1 ✗ toml ✗ langchain-core ✓ ply ✓ httptools ✓ markdown ✓ mcp ✓ cachecontrol ✓ stack-data ✗ pure-eval ✗ pymongo ✗ pandas-stubs ✓ sentry-sdk ✗ webencodings ✓ pytest-xdist ✗ termcolor ✓ httpx-sse ✗ execnet ✗ databricks-sdk ✗ pymysql ✓ typer-slim ✓ authlib ✗ sse-starlette ✗ aioitertools ✓ pkginfo ✗ jsonpatch ✗ litellm ✗ croniter ✗ debugpy ✗ isort ✓ dbt-adapters ✓ typing-inspect ✗ watchdog ✗ dulwich ✓ msrest ✗ pyzmq ✗ jsonpath-ng ✗ h2 ✗ hyperframe ✗ hpack ✗ pycryptodome ✗ ruamel-yaml-clib ✗ snowflake-sqlalchemy ✗ xxhash ✗ poetry ✓ dbt-common ✓ pytest-mock ✗ lz4 ✗ typedload ✓ mccabe ✗ rich-toolkit ✓ pendulum ✗ slack-sdk ✗ sphinx ✓ torch ✓ google-cloud-bigtable ✗ google-cloud-vision ✗ google-cloud-monitoring ✗ google-cloud-speech ✗ notebook ✗ inspect-ai ✓ azure-common ✗ argcomplete ✗ dataclasses-json ✗ jupyter-core ✓ google-cloud-kms ✗ cleo ✗ ipykernel ✓ databricks-sql-connector ✗ tree-sitter ✓ installer ✓ portalocker ✗ google-cloud-tasks ✗ pygithub ✗ loguru ✗ google-cloud-logging ✗ crashtest ✗ google-cloud-dlp ✗ google-cloud-compute ✗ invoke ✗ botocore-stubs ✗ datadog ✗ types-awscrt ✗ arrow ✗ poetry-plugin-export ✓ deepdiff ✗ google-cloud-videointelligence ✗ smart-open ✗ jupyter-client ✓ google-cloud-language ✗ pycodestyle ✓

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.