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

Top 120 - 240

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

Top 240 - 360

httptools ✓ azure-storage-blob ✗ xmltodict ✗ cython ✗ gunicorn ✓ tornado ✗ httpx-sse ✗ black ✓ cloudpickle ✗ sentry-sdk ✗ asgiref ✗ aiofiles ✗ pre-commit ✓ opentelemetry-util-http ✗ identify ✓ databricks-sdk ✗ opentelemetry-instrumentation-requests ✗ parso ✗ traitlets ✓ executing ✗ google-cloud-secret-manager ✗ jedi ✗ cfgv ✓ importlib-resources ✓ asttokens ✗ pytest-xdist ✗ jsonschema-path ✓ multiprocess ✗ cachecontrol ✓ grpc-google-iam-v1 ✗ execnet ✗ python-json-logger ✗ matplotlib-inline ✗ markdown ✓ flatbuffers ✓ py4j ✗ durationpy ✓ xxhash ✗ webencodings ✓ stack-data ✗ pure-eval ✗ pathable ✓ langchain-core ✓ typing-inspect ✗ h2 ✗ nest-asyncio ✗ watchdog ✗ hyperframe ✗ hpack ✗ jsonpatch ✗ litellm ✗ google-cloud-batch ✗ termcolor ✓ pydantic-ai-slim ✓ pyperclip ✗ pytest-mock ✗ dulwich ✓ dbt-core ✓ google-analytics-admin ✗ isort ✓ pkginfo ✗ pymupdf ✓ pymongo ✗ onnxruntime ✓ gcsfs ✓ grpcio-health-checking ✗ debugpy ✗ anthropic ✗ beartype ✓ aioitertools ✓ cyclopts ✓ jsonref ✓ poetry ✓ torch ✓ dbt-adapters ✓ jsonpath-ng ✓ awswrangler ✓ dataclasses-json ✗ pymysql ✓ slack-sdk ✗ fastmcp ✓ mccabe ✗ pyzmq ✗ rich-rst ✗ ruamel-yaml-clib ✗ typedload ✓ pandas-stubs ✓ installer ✓ cleo ✗ lz4 ✗ pycryptodome ✗ crashtest ✗ tree-sitter ✓ pygithub ✗ pydantic-graph ✓ msrest ✗ langsmith ✓ dbt-common ✓ deepdiff ✗ rfc3339-validator ✓ cattrs ✓ datasets ✓ librt ✗ safetensors ✗ tinycss2 ✓ semver ✗ pytest-json-ctrf ✓ py-key-value-aio ✓ wsproto ✓ xlsxwriter ✗ pycodestyle ✓ narwhals ✗ loguru ✗ arrow ✗ smart-open ✓ sphinx ✓ faker ✓ pendulum ✗ backports-tarfile ✓ requests-file ✓

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.