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

Top 120 - 240

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

Top 240 - 360

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

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.