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

Top 120 - 240

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

Top 240 - 360

babel ✗ mypy ✗ jsonpointer ✗ ipython ✓ nodeenv ✗ aiofiles ✗ httpx-sse ✗ authlib ✗ databricks-sdk ✗ cloudpickle ✗ black ✓ httptools ✓ tiktoken ✓ opentelemetry-util-http ✗ grpcio-health-checking ✗ asgiref ✗ py4j ✗ gunicorn ✓ toml ✗ opentelemetry-instrumentation-requests ✗ aliyun-python-sdk-core ✗ tornado ✗ pre-commit ✓ importlib-resources ✓ parso ✗ cython ✗ traitlets ✓ identify ✓ dbt-core ✓ executing ✗ durationpy ✓ jedi ✗ pandas-stubs ✓ pytest-xdist ✗ langchain-core ✓ markdown ✓ asttokens ✗ cfgv ✓ grpc-google-iam-v1 ✗ pydantic-graph ✓ execnet ✗ matplotlib-inline ✗ litellm ✗ webencodings ✓ python-json-logger ✗ cachecontrol ✓ nest-asyncio ✗ isort ✓ jsonschema-path ✓ stack-data ✗ pure-eval ✗ jsonpatch ✗ typing-inspect ✗ pymongo ✗ awswrangler ✓ termcolor ✓ xxhash ✗ dbt-adapters ✓ aioitertools ✓ h2 ✗ hyperframe ✗ hpack ✗ pymysql ✓ watchdog ✗ cattrs ✓ debugpy ✗ pkginfo ✗ pyperclip ✗ pytest-mock ✗ pathable ✓ typedload ✓ dbt-common ✓ dulwich ✓ dataclasses-json ✗ jsonpath-ng ✓ torch ✓ msrest ✗ rich-toolkit ✓ pyzmq ✗ slack-sdk ✗ pycryptodome ✗ google-cloud-speech ✗ google-cloud-monitoring ✗ databricks-sql-connector ✗ google-cloud-vision ✗ google-cloud-compute ✗ google-cloud-kms ✗ invoke ✗ lz4 ✗ pygithub ✗ tree-sitter ✓ sphinx ✓ google-cloud-tasks ✗ ruamel-yaml-clib ✗ google-cloud-dlp ✗ langsmith ✓ semver ✗ portalocker ✗ poetry ✓ opentelemetry-exporter-prometheus ✗ mccabe ✗ rfc3339-validator ✓ google-cloud-workflows ✗ google-cloud-videointelligence ✗ sqlalchemy-bigquery ✗ google-cloud-language ✗ google-cloud-bigtable ✗ multiprocess ✗ pendulum ✗ snowflake-sqlalchemy ✗ anthropic ✗ deepdiff ✗ google-cloud-os-login ✗ google-cloud-dataform ✗ beartype ✓ cyclopts ✓ tinycss2 ✓ nvidia-nccl-cu12 ✗ smart-open ✓ argcomplete ✗

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.