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

Top 120 - 240

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

Top 240 - 360

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

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.