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 ✗ grpcio-status ✓ python-dateutil ✗ six ✓ numpy ✓ pytest ✓ cffi ✗ pyyaml ✗ pydantic ✗ iniconfig ✓ s3fs ✓ pycparser ✓ anyio ✓ click ✓ pydantic-core ✓ s3transfer ✓ fsspec ✓ attrs ✗ protobuf ✓ h11 ✗ pandas ✓ annotated-types ✗ httpx ✗ httpcore ✗ markupsafe ✓ litellm ✓ typing-inspection ✗ platformdirs ✓ python-dotenv ✓ jinja2 ✓ pathspec ✗ filelock ✓ pyjwt ✗ tqdm ✗ pip ✓ aiohttp ✓ jmespath ✗ rich ✗ yarl ✓ markdown-it-py ✓ rpds-py ✓ propcache ✓ google-auth ✓ multidict ✗ jsonschema ✓ wheel ✗ opentelemetry-sdk ✓ starlette ✓ aiohappyeyeballs ✓ pytz ✗ mdurl ✗ pyasn1 ✗ virtualenv ✗ frozenlist ✗ importlib-metadata ✓ fastapi ✓ trove-classifiers ✓ uvicorn ✓ zipp ✓ aiosignal ✓ referencing ✓ tzdata ✓ jsonschema-specifications ✗ googleapis-common-protos ✗ pillow ✓ opentelemetry-semantic-conventions ✓ google-api-core ✓ wrapt ✗ greenlet ✓ annotated-doc ✗ pyasn1-modules ✗ grpcio ✓ sniffio ✓ scipy ✓ typer ✓ huggingface-hub ✓ hatchling ✓ opentelemetry-api ✓ websockets ✓ beautifulsoup4 ✓ sglang ✓ opentelemetry-exporter-otlp-proto-http ✓ pydantic-settings ✓ shellingham ✗ sqlalchemy ✗ colorama ✗ pyarrow ✓ tenacity ✓ pyparsing ✗ soupsieve ✗ browser-use ✓ opentelemetry-proto ✓ textual ✗ psutil ✓ regex ✓ openai ✗ tomli ✓ distro ✗ requests-oauthlib ✗ lxml ✗ python-multipart ✓ jiter ✗ sse-starlette ✓ langchain ✓ awscli ✓ pytest-json-ctrf ✓ exceptiongroup ✓

Top 120 - 240

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

Top 240 - 360

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

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.