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

Top 120 - 240

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

Top 240 - 360

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

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.