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

Top 120 - 240

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

Top 240 - 360

cloudpickle ✗ databricks-sdk ✗ httptools ✓ babel ✗ tornado ✗ gunicorn ✓ opentelemetry-instrumentation-requests ✗ azure-storage-blob ✗ parso ✗ sentry-sdk ✗ vcs-versioning ✓ executing ✗ pre-commit ✓ google-cloud-secret-manager ✗ identify ✓ traitlets ✓ cython ✗ opentelemetry-util-http ✗ aiofiles ✗ grpc-google-iam-v1 ✗ jedi ✗ xmltodict ✗ asttokens ✗ black ✓ cfgv ✓ langchain-core ✓ durationpy ✓ py4j ✗ jsonschema-path ✓ asgiref ✗ matplotlib-inline ✗ python-json-logger ✓ importlib-resources ✓ pydantic-ai-slim ✓ google-cloud-batch ✗ xxhash ✗ typing-inspect ✗ google-analytics-admin ✗ pytest-xdist ✗ webencodings ✓ cachecontrol ✓ pure-eval ✗ stack-data ✗ litellm ✗ h2 ✗ markdown ✓ flatbuffers ✓ hpack ✗ hyperframe ✗ pathable ✓ nest-asyncio ✗ execnet ✗ pyperclip ✗ dbt-core ✓ termcolor ✓ jsonpatch ✗ pymongo ✗ tree-sitter ✓ anthropic ✗ dbt-adapters ✓ pymupdf ✓ beartype ✓ jsonref ✓ watchdog ✗ grpcio-health-checking ✗ dataclasses-json ✗ dulwich ✓ debugpy ✗ cyclopts ✓ fastmcp ✓ onnxruntime ✓ pandas-stubs ✓ awswrangler ✓ pkginfo ✗ torch ✓ pymysql ✓ pydantic-graph ✓ lz4 ✗ rich-rst ✗ isort ✓ pyzmq ✗ datasets ✓ aioitertools ✓ pytest-mock ✗ jsonpath-ng ✓ slack-sdk ✗ pycryptodome ✗ mccabe ✗ dbt-common ✓ poetry ✓ librt ✗ deepdiff ✓ smart-open ✓ py-key-value-aio ✓ databricks-sql-connector ✗ rich-toolkit ✓ gcsfs ✓ narwhals ✗ tinycss2 ✓ rfc3339-validator ✓ langsmith ✓ weaviate-client ✓ typedload ✓ sglang ✓ pygithub ✗ msrest ✗ xlsxwriter ✗ cleo ✗ yandexcloud ✗ semver ✗ google-cloud-monitoring ✗ invoke ✗ crashtest ✗ installer ✓ ruamel-yaml-clib ✗ arrow ✗ pendulum ✗ pytest-json-ctrf ✓ loguru ✗ sphinx ✓

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.