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

Top 120 - 240

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

Top 240 - 360

paramiko ✗ asttokens ✗ opentelemetry-exporter-otlp ✗ matplotlib-inline ✗ httplib2 ✓ pyproject-hooks ✓ google-cloud-aiplatform ✓ poetry-core ✓ datasets ✓ opentelemetry-instrumentation-requests ✗ backoff ✗ mpmath ✗ pure-eval ✗ stack-data ✗ types-requests ✓ google-cloud-secret-manager ✗ aiofiles ✗ build ✓ opentelemetry-util-http ✗ pytest-json-ctrf ✓ durationpy ✓ jsonpointer ✓ marshmallow ✓ sqlparse ✗ setuptools-scm ✓ cloudpickle ✗ termcolor ✓ fastjsonschema ✗ google-cloud-batch ✗ msal-extensions ✗ pydantic-graph ✓ anthropic ✗ tree-sitter ✓ weaviate-client ✓ pytest-xdist ✗ azure-storage-blob ✗ gunicorn ✓ babel ✗ ydb ✗ execnet ✗ google-analytics-admin ✗ sentry-sdk ✗ py4j ✗ markdown ✓ tornado ✗ nest-asyncio ✗ asgiref ✗ cython ✗ xmltodict ✗ authlib ✓ librt ✗ webencodings ✓ databricks-sdk ✓ google-cloud-compute ✗ black ✓ google-cloud-kms ✗ dbt-core ✓ gcsfs ✓ importlib-resources ✓ vcs-versioning ✓ jsonpatch ✗ langchain-core ✓ cachecontrol ✓ pyzmq ✗ python-json-logger ✓ pymongo ✗ debugpy ✗ google-cloud-dlp ✗ typing-inspect ✗ google-cloud-speech ✗ watchdog ✗ pandas-stubs ✓ google-cloud-pubsub ✗ joserfc ✗ aioitertools ✓ slack-sdk ✗ google-cloud-texttospeech ✗ mdit-py-plugins ✗ flatbuffers ✓ dbt-adapters ✓ lz4 ✗ pycryptodome ✗ cbor2 ✓ torch ✓ pymysql ✓ awswrangler ✓ tinycss2 ✓ linkify-it-py ✓ jsonschema-path ✓ types-toml ✓ dulwich ✓ grpcio-health-checking ✗ pytest-mock ✗ uc-micro-py ✓ xlsxwriter ✗ msrest ✗ typedload ✓ google-cloud-monitoring ✗ safetensors ✗ rich-toolkit ✓ cyclopts ✓ pymupdf ✓ google-cloud-tasks ✗ jupyter-core ✓ pkginfo ✗ narwhals ✗ isort ✓ setproctitle ✗ dbt-common ✓ google-cloud-logging ✗ asyncpg ✗ dataclasses-json ✗ deepdiff ✓ cattrs ✓ semver ✗ structlog ✗ llama-parse ✓ google-cloud-bigtable ✗ pyperclip ✗ jupyter-client ✓

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.