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

Top 120 - 240

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

Top 240 - 360

pyee ✗ aiofiles ✗ sympy ✗ fastjsonschema ✗ marshmallow ✓ types-requests ✓ backoff ✗ transformers ✓ google-cloud-batch ✗ jedi ✓ parso ✗ msal-extensions ✗ ydb ✗ playwright ✗ identify ✓ sqlparse ✗ pre-commit ✓ azure-storage-blob ✗ weaviate-client ✓ executing ✗ setuptools-scm ✓ cfgv ✓ dbt-core ✓ durationpy ✓ mpmath ✗ gunicorn ✓ babel ✗ pytest-json-ctrf ✓ matplotlib-inline ✗ h2 ✗ cloudpickle ✗ hyperframe ✗ hpack ✗ anthropic ✗ google-analytics-admin ✗ asttokens ✗ grpc-google-iam-v1 ✗ authlib ✓ tornado ✗ asgiref ✗ sentry-sdk ✗ datasets ✓ nest-asyncio ✗ xmltodict ✗ webencodings ✓ stack-data ✗ pure-eval ✗ google-cloud-compute ✗ databricks-sdk ✓ cython ✗ google-cloud-kms ✗ pytest-xdist ✗ gcsfs ✓ black ✓ librt ✗ jsonpatch ✗ langchain-core ✓ execnet ✗ py4j ✗ markdown ✓ python-json-logger ✓ cachecontrol ✓ pandas-stubs ✓ joserfc ✗ importlib-resources ✓ pyzmq ✗ vcs-versioning ✓ google-cloud-dlp ✗ debugpy ✗ termcolor ✓ pymongo ✗ watchdog ✗ google-cloud-speech ✗ typing-inspect ✗ google-cloud-pubsub ✗ ujson ✓ llama-parse ✓ llama-cloud-services ✓ dbt-adapters ✓ aioitertools ✓ google-cloud-texttospeech ✗ tinycss2 ✓ pycryptodome ✗ pymysql ✓ lz4 ✗ tree-sitter ✓ rich-toolkit ✓ isort ✓ slack-sdk ✗ jupyter-core ✓ narwhals ✗ pytest-mock ✗ structlog ✗ dulwich ✓ msrest ✗ ruamel-yaml-clib ✗ asyncpg ✗ dacite ✗ dbt-common ✓ torch ✓ flatbuffers ✓ grpcio-health-checking ✗ mdit-py-plugins ✗ loguru ✗ pkginfo ✗ google-cloud-tasks ✗ pyperclip ✗ jupyter-client ✓ jsonschema-path ✓ langsmith ✓ dataclasses-json ✗ awswrangler ✓ google-cloud-monitoring ✗ ipykernel ✓ google-cloud-logging ✗ google-cloud-bigtable ✗ deepdiff ✓ invoke ✗ semver ✗ arrow ✗

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.