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

Top 120 - 240

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

Top 240 - 360

google-auth-httplib2 ✓ langchain-core ✓ sympy ✗ google-auth-oauthlib ✓ backoff ✗ google-cloud-secret-manager ✓ mpmath ✗ weaviate-client ✓ asn1crypto ✗ jsonpointer ✓ aiofiles ✗ authlib ✓ traitlets ✓ google-cloud-aiplatform ✓ async-timeout ✓ msal-extensions ✗ fastjsonschema ✓ pyproject-hooks ✓ joserfc ✓ datasets ✓ google-cloud-batch ✓ asgiref ✓ paramiko ✗ librt ✗ narwhals ✓ pytest-timeout ✗ sqlparse ✗ executing ✗ build ✓ poetry-core ✓ cloudpickle ✗ webencodings ✓ pydantic-ai-slim ✓ pypdf ✗ google-cloud-kms ✓ isort ✓ gcsfs ✓ google-analytics-admin ✓ asttokens ✗ jedi ✓ parso ✗ google-cloud-compute ✓ gunicorn ✓ azure-storage-blob ✗ babel ✗ matplotlib-inline ✗ databricks-sdk ✓ jsonpatch ✗ grpc-google-iam-v1 ✗ truststore ✓ stack-data ✗ pure-eval ✗ tornado ✗ cachecontrol ✓ types-requests ✓ google-cloud-dlp ✓ xmltodict ✗ markdown ✓ langsmith ✓ setuptools-scm ✗ psycopg ✓ pydantic-graph ✓ marshmallow ✓ google-cloud-texttospeech ✓ python-docx ✗ cython ✗ dbt-adapters ✓ google-cloud-speech ✓ pymupdf ✓ asyncpg ✗ google-cloud-pubsub ✓ python-json-logger ✓ psycopg-binary ✓ cfn-lint ✓ structlog ✓ vcs-versioning ✗ tinycss2 ✓ xlsxwriter ✗ kubernetes ✓ pytokens ✗ watchdog ✗ flatbuffers ✓ pyperclip ✗ safetensors ✓ termcolor ✓ jsonschema-path ✓ pytest-mock ✗ pyzmq ✗ pymongo ✗ fastmcp ✓ beartype ✓ httpx2 ✓ griffelib ✓ debugpy ✗ typedload ✓ fastuuid ✗ py4j ✗ aioitertools ✓ cyclopts ✓ httpcore2 ✓ pathable ✓ lz4 ✗ nest-asyncio ✗ pytest-rerunfailures ✓ jsonref ✓ slack-sdk ✗ onnxruntime ✓ google-cloud-logging ✓ databricks-sql-connector ✓ opentelemetry-exporter-prometheus ✓ mdit-py-plugins ✗ importlib-resources ✓ google-cloud-tasks ✓ py-key-value-aio ✓ fastmcp-slim ✓ jupyter-core ✓ deprecation ✓ playwright ✓ dulwich ✓ tomli-w ✓

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.