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

Top 120 - 240

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

Top 240 - 360

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

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.