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

Top 120 - 240

distro ✗ openpyxl ✗ tomlkit ✗ mcp ✓ jiter ✗ et-xmlfile ✗ opentelemetry-proto ✗ ptyprocess ✓ werkzeug ✓ grpcio-tools ✓ pexpect ✓ huggingface-hub ✓ wcwidth ✗ google-cloud-storage ✓ editables ✗ multiprocess ✗ gitpython ✗ networkx ✓ mypy-extensions ✗ textual ✗ sse-starlette ✓ decorator ✗ docker ✗ opentelemetry-exporter-otlp-proto-http ✗ langchain ✓ fonttools ✓ msgpack ✓ redis ✓ smmap ✗ dnspython ✓ matplotlib ✓ coverage ✓ python-discovery ✗ pyopenssl ✗ psycopg2-binary ✗ async-timeout ✓ kiwisolver ✓ tabulate ✓ prompt-toolkit ✗ pynacl ✗ sortedcontainers ✓ scikit-learn ✓ google-genai ✓ gitdb ✗ docstring-parser ✗ contourpy ✓ flask ✓ google-cloud-core ✗ httpx-sse ✗ opentelemetry-exporter-otlp-proto-common ✗ opentelemetry-exporter-otlp-proto-grpc ✗ keyring ✓ itsdangerous ✓ isodate ✗ ruff ✗ dill ✗ joblib ✗ uvloop ✗ cycler ✗ hf-xet ✗ kubernetes ✗ threadpoolctl ✗ opentelemetry-instrumentation ✗ jaraco-classes ✓ google-crc32c ✓ google-resumable-media ✗ bcrypt ✗ chardet ✓ secretstorage ✓ jeepney ✓ orjson ✓ blinker ✓ azure-identity ✗ azure-core ✗ ipython ✓ httptools ✓ alembic ✓ jaraco-context ✓ pydantic-ai-slim ✓ pytest-cov ✗ msal ✗ jaraco-functools ✓ tzlocal ✗ zstandard ✗ toml ✗ defusedxml ✗ nodeenv ✗ deprecated ✗ pytest-asyncio ✓ snowflake-connector-python ✗ tokenizers ✓ setuptools-scm ✓ ruamel-yaml ✗ email-validator ✗ traitlets ✓ parso ✗ xxhash ✗ tiktoken ✓ prometheus-client ✗ jedi ✗ executing ✗ identify ✓ google-cloud-bigquery ✗ pre-commit ✓ sympy ✗ mako ✗ matplotlib-inline ✗ uv ✗ google-api-python-client ✗ asttokens ✗ cfgv ✓ rapidfuzz ✓ durationpy ✓ google-cloud-aiplatform ✓ pytest-json-ctrf ✓ tree-sitter ✓ transformers ✓ types-requests ✓ mpmath ✗ asn1crypto ✗

Top 240 - 360

pure-eval ✗ stack-data ✗ google-auth-oauthlib ✗ h2 ✗ pyproject-hooks ✓ uritemplate ✓ paramiko ✗ hyperframe ✗ mypy ✓ hpack ✗ opentelemetry-exporter-otlp ✗ google-auth-httplib2 ✗ fastjsonschema ✗ cloudpickle ✗ poetry-core ✓ build ✗ jsonpointer ✓ grpc-google-iam-v1 ✗ backoff ✗ datasets ✓ sqlparse ✗ tornado ✗ httplib2 ✓ aiofiles ✗ marshmallow ✓ babel ✗ vcs-versioning ✓ opentelemetry-instrumentation-requests ✗ opentelemetry-util-http ✗ pytest-xdist ✗ msal-extensions ✗ markdown ✓ google-cloud-secret-manager ✗ cython ✗ termcolor ✓ execnet ✗ anthropic ✗ asgiref ✗ gunicorn ✓ azure-storage-blob ✗ webencodings ✓ authlib ✓ nest-asyncio ✗ weaviate-client ✓ py4j ✗ sentry-sdk ✗ tree-sitter-languages ✓ xmltodict ✗ google-cloud-batch ✗ python-json-logger ✓ black ✓ databricks-sdk ✓ awswrangler ✓ debugpy ✗ pyee ✗ pyzmq ✗ importlib-resources ✓ google-analytics-admin ✗ langchain-core ✓ dbt-core ✓ jsonpatch ✗ cachecontrol ✓ ydb ✗ gcsfs ✓ playwright ✗ google-cloud-compute ✗ joserfc ✗ databricks-sql-connector ✗ librt ✗ pymongo ✗ google-cloud-kms ✗ typing-inspect ✗ watchdog ✗ tinycss2 ✓ jsonschema-path ✓ dbt-adapters ✓ aioitertools ✓ cyclopts ✓ jupyter-core ✓ pytest-mock ✗ dulwich ✓ safetensors ✗ lz4 ✗ google-cloud-pubsub ✗ ipykernel ✓ narwhals ✗ jupyter-client ✓ google-cloud-dlp ✗ torch ✓ pymysql ✓ rfc3339-validator ✓ pycryptodome ✗ ujson ✓ cbor2 ✗ types-pyyaml ✓ flatbuffers ✓ rich-rst ✗ pathable ✓ google-cloud-speech ✗ slack-sdk ✗ pkginfo ✗ comm ✓ isort ✓ pandas-stubs ✓ msrest ✗ shapely ✓ pyperclip ✗ dataclasses-json ✗ deepdiff ✓ arrow ✗ langsmith ✓ grpcio-health-checking ✗ dbt-common ✓ invoke ✗ xlsxwriter ✗ ipython-pygments-lexers ✓ loguru ✗ jsonref ✓ pygithub ✗ pydantic-graph ✓

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.