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

Top 120 - 240

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

Top 240 - 360

sentry-sdk ✗ httplib2 ✓ async-timeout ✓ jsonpointer ✓ snowflake-connector-python ✓ rapidfuzz ✓ narwhals ✓ pypdf ✗ aiofiles ✗ msal-extensions ✗ databricks-sdk ✓ pytest-xdist ✗ opentelemetry-exporter-otlp ✓ datasets ✓ execnet ✗ sqlparse ✓ cloudpickle ✗ paramiko ✗ librt ✗ google-cloud-secret-manager ✓ ipython ✓ ydb ✓ fastjsonschema ✓ webencodings ✓ awscli ✓ psycopg ✓ traitlets ✓ asgiref ✓ grpc-google-iam-v1 ✓ gunicorn ✓ authlib ✓ psycopg-binary ✓ jsonpatch ✗ azure-storage-blob ✗ pyproject-hooks ✓ babel ✗ isort ✓ pydantic-ai-slim ✓ joserfc ✓ executing ✗ setuptools-scm ✗ poetry-core ✓ build ✓ markdown ✓ vcs-versioning ✗ asyncpg ✗ asttokens ✗ gcsfs ✓ jedi ✓ parso ✗ google-cloud-batch ✓ marshmallow ✓ langsmith ✓ xmltodict ✗ cython ✗ tornado ✗ cachecontrol ✓ python-docx ✗ matplotlib-inline ✗ python-json-logger ✓ structlog ✓ google-cloud-aiplatform ✓ stack-data ✗ pure-eval ✗ watchdog ✗ safetensors ✓ google-cloud-kms ✓ tinycss2 ✓ playwright ✓ pydantic-graph ✓ google-analytics-admin ✓ google-cloud-compute ✓ pyzmq ✓ xlsxwriter ✗ pymupdf ✓ pyee ✓ aioitertools ✓ lz4 ✗ kubernetes ✓ pymysql ✓ fastuuid ✗ pytokens ✗ nest-asyncio ✗ py4j ✗ typedload ✓ termcolor ✓ google-cloud-pubsub ✓ pytest-mock ✗ wsproto ✓ google-cloud-dlp ✓ debugpy ✗ reportlab ✓ brotli ✓ sglang ✓ flatbuffers ✓ pytest-timeout ✗ pymongo ✗ google-cloud-speech ✓ awswrangler ✓ google-cloud-logging ✓ google-cloud-texttospeech ✓ croniter ✗ sqlglot ✓ jupyter-core ✓ loguru ✗ slack-sdk ✗ deprecation ✓ dbt-adapters ✓ cbor2 ✓ pycryptodome ✗ torch ✓ tomli-w ✓ opentelemetry-instrumentation-fastapi ✓ importlib-resources ✓ uuid-utils ✓ xlrd ✗ nbformat ✓ typing-inspect ✗ ast-serialize ✗ invoke ✗

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.