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

Top 120 - 240

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

Top 240 - 360

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

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.