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

Top 120 - 240

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

Top 240 - 360

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

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.