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

Top 120 - 240

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

Top 240 - 360

msal-extensions ✗ cfgv ✓ prometheus-client ✗ hpack ✓ black ✓ pyproject-hooks ✓ sympy ✗ toml ✗ jsonpointer ✓ google-analytics-admin ✓ google-cloud-kms ✓ traitlets ✓ mpmath ✗ h2 ✗ aiofiles ✗ paramiko ✗ hyperframe ✗ google-cloud-compute ✓ poetry-core ✓ gcsfs ✓ sentry-sdk ✗ backoff ✗ fastjsonschema ✗ sglang ✓ google-cloud-aiplatform ✓ cloudpickle ✗ build ✓ sqlparse ✗ jedi ✓ asgiref ✗ narwhals ✓ executing ✗ opentelemetry-instrumentation-threading ✓ databricks-sdk ✓ azure-storage-blob ✗ webencodings ✓ google-cloud-dlp ✓ parso ✗ pymupdf ✓ babel ✗ datasets ✓ google-cloud-texttospeech ✓ matplotlib-inline ✗ asttokens ✗ tornado ✗ grpc-google-iam-v1 ✗ jsonpatch ✗ google-cloud-speech ✓ librt ✗ gunicorn ✓ cachecontrol ✓ stack-data ✗ pure-eval ✗ marshmallow ✓ databricks-sql-connector ✗ pyperclip ✗ setuptools-scm ✗ pandas-stubs ✓ xmltodict ✗ google-cloud-pubsub ✓ xlsxwriter ✗ isort ✓ jsonschema-path ✓ types-requests ✓ dbt-adapters ✓ cython ✗ python-json-logger ✓ dbt-core ✓ pypdf ✗ typedload ✓ python-docx ✗ pymongo ✗ flatbuffers ✓ beartype ✓ vcs-versioning ✗ pydantic-graph ✓ py4j ✗ griffelib ✓ cyclopts ✓ pathable ✓ markdown ✓ kubernetes ✓ jsonref ✓ tinycss2 ✓ rich-rst ✗ aioitertools ✓ psycopg ✓ pyzmq ✗ structlog ✓ asyncpg ✗ langsmith ✓ debugpy ✗ pytokens ✗ watchdog ✗ py-key-value-aio ✓ google-cloud-tasks ✓ termcolor ✓ snowflake-snowpark-python ✓ slack-sdk ✗ nest-asyncio ✗ onnxruntime ✓ importlib-resources ✓ lz4 ✗ pytest-mock ✗ fastmcp ✓ psycopg-binary ✓ pytest-rerunfailures ✓ google-cloud-logging ✓ dulwich ✓ google-cloud-monitoring ✓ mdit-py-plugins ✗ pycryptodome ✗ llama-parse ✓ opentelemetry-exporter-prometheus ✓ llama-cloud-services ✓ safetensors ✓ jupyter-core ✓ pkginfo ✗ awswrangler ✓ markdownify ✓

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.