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

Top 120 - 240

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

Top 240 - 360

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

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.