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

Top 120 - 240

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

Top 240 - 360

marshmallow ✓ pytest-xdist ✗ authlib ✓ jedi ✗ cloudpickle ✗ sqlparse ✗ executing ✗ google-cloud-aiplatform ✗ opentelemetry-util-http ✗ tornado ✗ opentelemetry-instrumentation-requests ✗ identify ✓ execnet ✗ jsonpointer ✓ asttokens ✗ pre-commit ✓ msal-extensions ✗ matplotlib-inline ✗ tree-sitter-languages ✓ cfgv ✓ babel ✗ gunicorn ✓ transformers ✓ opensearch-py ✓ cython ✗ aiofiles ✗ grpc-google-iam-v1 ✗ pure-eval ✗ stack-data ✗ azure-storage-blob ✗ xxhash ✗ asgiref ✗ h2 ✗ google-cloud-secret-manager ✗ hyperframe ✗ xmltodict ✗ hpack ✗ durationpy ✓ sentry-sdk ✗ requests-aws4auth ✗ nest-asyncio ✗ black ✓ markdown ✓ importlib-resources ✓ webencodings ✓ py4j ✗ vcs-versioning ✓ termcolor ✓ langchain-core ✓ google-cloud-batch ✗ databricks-sdk ✗ python-json-logger ✓ pyee ✗ anthropic ✗ weaviate-client ✓ events ✓ debugpy ✗ cachecontrol ✓ watchdog ✗ google-analytics-admin ✗ datasets ✓ playwright ✗ dbt-core ✓ jsonpatch ✗ pyzmq ✗ typing-inspect ✗ jsonschema-path ✓ dbt-adapters ✓ librt ✗ pytest-json-ctrf ✓ gcsfs ✓ pymongo ✗ pytest-mock ✗ pathable ✓ google-cloud-compute ✗ aioitertools ✓ pyperclip ✗ isort ✓ google-cloud-kms ✗ dulwich ✓ pkginfo ✗ ujson ✓ typedload ✓ jsonref ✓ pycryptodome ✗ pandas-stubs ✓ slack-sdk ✗ databricks-sql-connector ✗ tinycss2 ✓ mccabe ✗ lz4 ✗ deepdiff ✓ narwhals ✗ flatbuffers ✓ pymysql ✓ grpcio-health-checking ✗ jupyter-core ✓ beartype ✓ dataclasses-json ✗ ydb ✗ jsonpath-ng ✓ opensearch-protobufs ✓ dbt-common ✓ msrest ✗ awswrangler ✓ fastmcp ✓ poetry ✓ ipykernel ✓ jupyter-client ✓ google-cloud-dlp ✗ cyclopts ✓ langsmith ✓ pygithub ✗ google-cloud-speech ✗ rfc3339-validator ✓ torch ✓ ruamel-yaml-clib ✗ rich-toolkit ✓ argcomplete ✗ structlog ✗

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.