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

Top 120 - 240

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

Top 240 - 360

identify ✓ pexpect ✓ mpmath ✗ cfgv ✓ asn1crypto ✗ rapidfuzz ✓ google-cloud-secret-manager ✓ awscli ✓ msal-extensions ✗ pypdf ✗ narwhals ✓ jsonpointer ✓ aiofiles ✗ async-timeout ✓ librt ✗ pytest-xdist ✗ paramiko ✗ webencodings ✓ cloudpickle ✗ authlib ✓ ipython ✓ execnet ✗ sqlparse ✓ pydantic-ai-slim ✓ fastjsonschema ✓ google-cloud-batch ✓ pyproject-hooks ✓ datasets ✓ grpc-google-iam-v1 ✓ joserfc ✓ asgiref ✓ databricks-sdk ✓ traitlets ✓ gcsfs ✓ google-cloud-aiplatform ✓ isort ✓ build ✓ psycopg ✓ poetry-core ✓ azure-storage-blob ✗ gunicorn ✓ jsonpatch ✗ google-cloud-kms ✓ google-analytics-admin ✓ babel ✗ google-cloud-compute ✓ psycopg-binary ✓ executing ✗ langsmith ✓ cython ✗ setuptools-scm ✗ cachecontrol ✓ parso ✗ jedi ✓ asyncpg ✗ markdown ✓ pydantic-graph ✓ asttokens ✗ xmltodict ✗ marshmallow ✓ google-cloud-dlp ✓ google-cloud-speech ✓ vcs-versioning ✗ sglang ✓ safetensors ✓ watchdog ✗ google-cloud-pubsub ✓ python-docx ✗ python-json-logger ✓ tornado ✗ matplotlib-inline ✗ playwright ✓ google-cloud-texttospeech ✓ dbt-adapters ✓ structlog ✓ stack-data ✗ tinycss2 ✓ pure-eval ✗ fastuuid ✗ pytokens ✗ fastmcp ✓ kubernetes ✓ pymupdf ✓ google-cloud-logging ✓ weaviate-client ✓ pyee ✓ lz4 ✗ pymongo ✗ aioitertools ✓ py4j ✗ xlsxwriter ✗ tree-sitter ✓ pymysql ✓ dbt-core ✓ flatbuffers ✓ nest-asyncio ✗ mdit-py-plugins ✗ termcolor ✓ tomli-w ✓ brotli ✓ google-cloud-monitoring ✓ croniter ✗ pyzmq ✗ pyperclip ✗ griffelib ✓ google-cloud-tasks ✓ opentelemetry-exporter-prometheus ✓ slack-sdk ✗ opentelemetry-instrumentation-fastapi ✓ pytest-timeout ✗ fastmcp-slim ✓ linkify-it-py ✓ importlib-resources ✓ pycryptodome ✗ pytest-mock ✗ torch ✓ deprecation ✓ debugpy ✗ uc-micro-py ✓ reportlab ✓

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.