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

Top 120 - 240

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

Top 240 - 360

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

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.