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

Top 120 - 240

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

Top 240 - 360

google-cloud-bigquery ✓ google-cloud-secret-manager ✓ google-auth-oauthlib ✓ httplib2 ✓ google-cloud-batch ✓ anthropic ✗ poetry-core ✓ sympy ✗ build ✓ jsonpointer ✓ jedi ✓ executing ✗ parso ✗ pydantic-graph ✓ mpmath ✗ paramiko ✗ fastjsonschema ✗ aiofiles ✗ sentry-sdk ✗ matplotlib-inline ✗ msal-extensions ✗ black ✓ google-cloud-kms ✗ google-cloud-aiplatform ✓ google-cloud-compute ✓ asttokens ✗ google-analytics-admin ✓ backoff ✗ azure-storage-blob ✗ sqlparse ✗ authlib ✓ stack-data ✗ pure-eval ✗ cloudpickle ✗ gcsfs ✓ narwhals ✓ asgiref ✗ datasets ✓ joserfc ✓ webencodings ✓ pytest-xdist ✗ gunicorn ✓ babel ✗ grpc-google-iam-v1 ✗ termcolor ✓ types-requests ✓ opentelemetry-instrumentation-threading ✓ google-cloud-dlp ✓ kubernetes ✓ databricks-sdk ✓ marshmallow ✓ execnet ✗ cython ✗ cachecontrol ✓ librt ✗ tornado ✗ jsonpatch ✗ google-cloud-texttospeech ✗ python-json-logger ✓ google-cloud-speech ✓ xmltodict ✗ pandas-stubs ✓ setuptools-scm ✓ tree-sitter ✓ google-cloud-pubsub ✓ mdit-py-plugins ✗ pymongo ✗ watchdog ✗ markdown ✓ dbt-adapters ✓ databricks-sql-connector ✗ asyncpg ✗ isort ✓ py4j ✗ linkify-it-py ✓ aioitertools ✓ uc-micro-py ✓ tinycss2 ✓ importlib-resources ✓ dulwich ✓ lz4 ✗ llama-cloud-services ✓ llama-parse ✓ pypdf ✗ pyperclip ✗ dbt-core ✓ pytest-mock ✗ fastuuid ✗ structlog ✓ debugpy ✗ xlsxwriter ✗ pyzmq ✗ flatbuffers ✓ pkginfo ✗ langsmith ✓ jsonschema-path ✓ snowflake-snowpark-python ✓ vcs-versioning ✓ pytokens ✗ nest-asyncio ✗ cyclopts ✓ google-cloud-tasks ✗ rich-toolkit ✓ google-cloud-logging ✓ safetensors ✓ google-cloud-monitoring ✓ python-docx ✗ cbor2 ✓ types-toml ✓ sphinx ✓ psycopg ✓ pymupdf ✓ pycryptodome ✗ slack-sdk ✗ msrest ✗ typing-inspect ✗ beartype ✓ opentelemetry-exporter-prometheus ✓ torch ✓ pathable ✓

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.