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

Top 120 - 240

requests-toolbelt ✗ hatchling ✓ google-genai ✓ werkzeug ✓ networkx ✓ pyopenssl ✗ distro ✗ google-cloud-storage ✓ dnspython ✓ opentelemetry-proto ✗ mypy-extensions ✗ psycopg2-binary ✗ coverage ✓ msgpack ✓ pynacl ✗ huggingface-hub ✓ mcp ✓ decorator ✗ opentelemetry-exporter-otlp-proto-http ✗ smmap ✗ fonttools ✓ jiter ✗ sortedcontainers ✓ wcwidth ✗ watchfiles ✗ pexpect ✓ ptyprocess ✓ tabulate ✓ flask ✓ gitpython ✗ matplotlib ✓ scikit-learn ✓ isodate ✗ keyring ✓ kiwisolver ✓ python-discovery ✗ sse-starlette ✓ redis ✓ docker ✗ opentelemetry-exporter-otlp-proto-grpc ✗ azure-identity ✗ opentelemetry-exporter-otlp-proto-common ✗ joblib ✗ textual ✗ jaraco-classes ✓ gitdb ✗ google-cloud-core ✗ bcrypt ✗ contourpy ✓ secretstorage ✓ jeepney ✓ azure-core ✗ itsdangerous ✓ snowflake-connector-python ✗ async-timeout ✓ threadpoolctl ✗ google-cloud-aiplatform ✗ opentelemetry-instrumentation ✗ ruff ✗ jaraco-context ✓ docstring-parser ✗ msal ✗ prompt-toolkit ✗ alembic ✓ jaraco-functools ✓ multiprocess ✗ sglang ✓ editables ✗ google-resumable-media ✗ tzlocal ✗ email-validator ✗ chardet ✓ cycler ✗ orjson ✓ deprecated ✗ google-crc32c ✓ kubernetes ✗ pytest-cov ✗ blinker ✓ hf-xet ✗ dill ✗ zstandard ✗ defusedxml ✗ types-requests ✓ ruamel-yaml ✗ google-api-python-client ✗ litellm ✗ asn1crypto ✗ poetry-core ✓ google-auth-oauthlib ✗ uv ✗ pytest-asyncio ✓ sympy ✗ ipython ✓ httpx-sse ✗ mako ✗ prometheus-client ✗ tokenizers ✗ backoff ✗ google-auth-httplib2 ✗ setuptools-scm ✓ paramiko ✗ mpmath ✗ google-cloud-bigquery ✗ rapidfuzz ✓ uritemplate ✓ tiktoken ✓ transformers ✓ httplib2 ✓ cloudpickle ✗ uvloop ✗ opentelemetry-exporter-otlp ✗ pyproject-hooks ✓ marshmallow ✓ toml ✗ nodeenv ✗ pydantic-ai-slim ✓ databricks-sdk ✗ build ✗ sqlparse ✗

Top 240 - 360

identify ✓ fastjsonschema ✗ durationpy ✓ msal-extensions ✗ google-cloud-secret-manager ✗ parso ✗ google-cloud-batch ✗ traitlets ✓ pre-commit ✓ opentelemetry-instrumentation-requests ✗ cfgv ✓ httptools ✓ mypy ✓ jsonpointer ✓ tree-sitter ✓ executing ✗ jedi ✗ azure-storage-blob ✗ gunicorn ✓ opentelemetry-util-http ✗ google-analytics-admin ✗ xxhash ✗ grpc-google-iam-v1 ✗ babel ✗ asttokens ✗ aiofiles ✗ matplotlib-inline ✗ authlib ✗ h2 ✗ cython ✗ tornado ✗ hyperframe ✗ hpack ✗ py4j ✗ black ✓ langchain-core ✓ pure-eval ✗ stack-data ✗ vcs-versioning ✓ xmltodict ✗ pytest-xdist ✗ importlib-resources ✓ weaviate-client ✓ termcolor ✓ asgiref ✗ python-json-logger ✓ markdown ✓ execnet ✗ sentry-sdk ✗ webencodings ✓ dbt-core ✓ nest-asyncio ✗ anthropic ✗ pandas-stubs ✓ pytest-json-ctrf ✓ datasets ✓ pydantic-graph ✓ typing-inspect ✗ cachecontrol ✓ grpcio-health-checking ✗ pymongo ✗ jsonpatch ✗ jsonschema-path ✓ tree-sitter-languages ✓ pymysql ✓ awswrangler ✓ aioitertools ✓ dbt-adapters ✓ databricks-sql-connector ✗ torch ✓ gcsfs ✓ debugpy ✗ lz4 ✗ watchdog ✗ pathable ✓ pyperclip ✗ pycryptodome ✗ dataclasses-json ✗ pyzmq ✗ jsonpath-ng ✓ rich-toolkit ✓ slack-sdk ✗ typedload ✓ google-cloud-monitoring ✗ google-cloud-compute ✗ pytest-mock ✗ flatbuffers ✓ google-cloud-kms ✗ isort ✓ pymupdf ✓ dulwich ✓ google-cloud-speech ✗ pkginfo ✗ msrest ✗ langsmith ✓ deepdiff ✓ dbt-common ✓ smart-open ✓ pygithub ✗ google-cloud-dlp ✗ google-cloud-vision ✗ narwhals ✗ jsonref ✓ beartype ✓ google-cloud-tasks ✗ sphinx ✓ google-cloud-bigtable ✗ pendulum ✗ tinycss2 ✓ notebook ✗ mccabe ✗ loguru ✗ xlsxwriter ✗ cattrs ✓ google-cloud-language ✗ google-cloud-videointelligence ✗ sqlalchemy-bigquery ✗ google-cloud-workflows ✗ rfc3339-validator ✓ invoke ✗

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.