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

Top 120 - 240

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

Top 240 - 360

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

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.