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

Top 120 - 240

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

Top 240 - 360

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