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

Top 120 - 240

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

Top 240 - 360

prometheus-client ✗ hpack ✓ cfgv ✓ sympy ✗ pyproject-hooks ✓ aiofiles ✗ sglang ✓ jsonpointer ✓ mpmath ✗ toml ✗ black ✓ msal-extensions ✗ google-cloud-kms ✓ poetry-core ✓ google-analytics-admin ✓ h2 ✗ hyperframe ✗ paramiko ✗ traitlets ✓ backoff ✗ google-cloud-compute ✓ gcsfs ✓ fastjsonschema ✗ cloudpickle ✗ sentry-sdk ✗ build ✓ google-cloud-aiplatform ✓ sqlparse ✗ asgiref ✗ datasets ✓ narwhals ✓ executing ✗ jedi ✓ databricks-sdk ✓ webencodings ✓ google-cloud-dlp ✓ azure-storage-blob ✗ pymupdf ✓ parso ✗ babel ✗ opentelemetry-instrumentation-threading ✓ google-cloud-texttospeech ✓ matplotlib-inline ✗ jsonpatch ✗ asttokens ✗ grpc-google-iam-v1 ✗ tornado ✗ gunicorn ✓ pyperclip ✗ google-cloud-speech ✓ cachecontrol ✓ librt ✗ stack-data ✗ marshmallow ✓ pure-eval ✗ setuptools-scm ✗ databricks-sql-connector ✗ pandas-stubs ✓ jsonschema-path ✓ browser-use ✓ xmltodict ✗ python-json-logger ✓ google-cloud-pubsub ✓ types-requests ✓ python-docx ✗ pypdf ✗ cython ✗ xlsxwriter ✗ beartype ✓ dbt-adapters ✓ isort ✓ typedload ✓ griffelib ✓ pathable ✓ cyclopts ✓ pymongo ✗ pydantic-graph ✓ vcs-versioning ✗ flatbuffers ✓ jsonref ✓ dbt-core ✓ py4j ✗ markdown ✓ kubernetes ✓ rich-rst ✗ tinycss2 ✓ termcolor ✓ aioitertools ✓ py-key-value-aio ✓ structlog ✓ asyncpg ✗ langsmith ✓ watchdog ✗ pyzmq ✗ psycopg ✓ google-cloud-tasks ✓ snowflake-snowpark-python ✓ debugpy ✗ fastmcp ✓ pytest-rerunfailures ✓ pytokens ✗ importlib-resources ✓ pytest-mock ✗ lz4 ✗ onnxruntime ✓ nest-asyncio ✗ mdit-py-plugins ✗ dulwich ✓ slack-sdk ✗ google-cloud-logging ✓ google-cloud-monitoring ✓ llama-parse ✓ pycryptodome ✗ safetensors ✓ llama-cloud-services ✓ opentelemetry-exporter-prometheus ✓ psycopg-binary ✓ pkginfo ✗ uncalled-for ✓ brotli ✓

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.