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

Top 120 - 240

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

Top 240 - 360

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

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.