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

Top 120 - 240

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

Top 240 - 360

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

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.