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

Top 120 - 240

watchfiles ✓ distlib ✗ grpcio-tools ✓ cachetools ✓ tomlkit ✗ opentelemetry-exporter-otlp-proto-common ✓ pyopenssl ✗ sse-starlette ✓ more-itertools ✓ editables ✗ openpyxl ✗ proto-plus ✓ oauthlib ✗ et-xmlfile ✗ python-discovery ✗ dnspython ✓ google-genai ✓ requests-toolbelt ✗ mcp ✓ rsa ✗ networkx ✓ wcwidth ✗ msgpack ✓ browser-use ✓ coverage ✓ gitpython ✗ multiprocess ✗ smmap ✗ mypy-extensions ✗ psycopg2-binary ✗ ruff ✗ google-cloud-storage ✓ sortedcontainers ✓ matplotlib ✓ docstring-parser ✗ fonttools ✓ werkzeug ✓ decorator ✗ redis ✓ hf-xet ✗ gitdb ✗ keyring ✓ weaviate-client ✓ pynacl ✗ prompt-toolkit ✗ websocket-client ✗ azure-identity ✗ jaraco-classes ✓ ydb ✗ docutils ✗ jeepney ✓ pytest-asyncio ✓ secretstorage ✓ pydantic-ai-slim ✓ azure-core ✓ kiwisolver ✓ email-validator ✗ tabulate ✓ isodate ✗ defusedxml ✗ contourpy ✓ tiktoken ✓ scikit-learn ✓ jaraco-functools ✓ tokenizers ✓ httptools ✓ jaraco-context ✓ joblib ✗ google-cloud-core ✓ ptyprocess ✓ pexpect ✓ pytest-cov ✗ opentelemetry-exporter-otlp ✓ tzlocal ✓ uvloop ✗ itsdangerous ✓ chardet ✓ bcrypt ✗ opentelemetry-instrumentation-requests ✓ msal ✗ httpx-sse ✗ dill ✗ alembic ✓ flask ✓ docker ✗ google-api-python-client ✗ google-resumable-media ✓ ipython ✓ orjson ✓ cycler ✗ google-crc32c ✓ deprecated ✗ google-cloud-bigquery ✓ snowflake-connector-python ✓ opentelemetry-util-http ✓ mako ✗ threadpoolctl ✗ ruamel-yaml ✗ google-cloud-batch ✓ google-cloud-secret-manager ✓ rapidfuzz ✓ uritemplate ✓ nodeenv ✗ langchain-core ✓ async-timeout ✓ blinker ✓ toml ✗ google-auth-httplib2 ✓ transformers ✓ asn1crypto ✗ google-auth-oauthlib ✓ xxhash ✗ traitlets ✓ prometheus-client ✗ uv ✗ httplib2 ✓ zstandard ✗ pyproject-hooks ✓ pre-commit ✓ hpack ✓

Top 240 - 360

identify ✓ h2 ✗ google-analytics-admin ✓ hyperframe ✗ mypy ✓ cfgv ✓ google-cloud-compute ✓ google-cloud-kms ✓ anthropic ✗ jsonpointer ✓ jedi ✓ executing ✗ poetry-core ✓ sympy ✗ parso ✗ gcsfs ✓ mpmath ✗ fastjsonschema ✗ matplotlib-inline ✗ authlib ✓ google-cloud-aiplatform ✓ asttokens ✗ build ✓ aiofiles ✗ paramiko ✗ backoff ✗ joserfc ✓ sentry-sdk ✗ stack-data ✗ pure-eval ✗ google-cloud-dlp ✓ msal-extensions ✗ cloudpickle ✗ black ✓ webencodings ✓ pydantic-graph ✓ databricks-sdk ✓ sqlparse ✗ google-cloud-texttospeech ✓ azure-storage-blob ✗ asgiref ✗ google-cloud-speech ✓ narwhals ✓ babel ✗ grpc-google-iam-v1 ✗ tornado ✗ opentelemetry-instrumentation-threading ✓ datasets ✓ pytest-xdist ✗ pandas-stubs ✓ gunicorn ✓ tree-sitter ✓ termcolor ✓ cachecontrol ✓ google-cloud-pubsub ✓ execnet ✗ marshmallow ✓ kubernetes ✓ jsonpatch ✗ cython ✗ types-requests ✓ setuptools-scm ✓ python-json-logger ✓ pymongo ✗ databricks-sql-connector ✗ xmltodict ✗ py4j ✗ dbt-adapters ✓ markdown ✓ librt ✗ tinycss2 ✓ pytest-timeout ✗ fastmcp ✓ isort ✓ pypdf ✗ pyzmq ✗ aioitertools ✓ debugpy ✗ snowflake-snowpark-python ✓ asyncpg ✗ dbt-core ✓ google-cloud-tasks ✓ pyperclip ✗ jsonschema-path ✓ xlsxwriter ✗ watchdog ✗ google-cloud-monitoring ✓ llama-cloud-services ✓ llama-parse ✓ google-cloud-logging ✓ dulwich ✓ python-docx ✗ langsmith ✓ nest-asyncio ✗ lmnr ✓ flatbuffers ✓ opentelemetry-exporter-prometheus ✓ importlib-resources ✓ vcs-versioning ✓ cyclopts ✓ lz4 ✗ pkginfo ✗ jupyter-core ✓ backports-zstd ✓ fastuuid ✗ pathable ✓ structlog ✓ pytest-mock ✗ google-cloud-vision ✓ torch ✓ beartype ✓ google-cloud-bigtable ✓ jsonref ✓ pytokens ✗ jupyter-client ✓ tomli-w ✓ typedload ✓ sphinx ✓ psycopg ✓ pymysql ✓

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.