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

Top 120 - 240

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

Top 240 - 360

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