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

Top 120 - 240

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

Top 240 - 360

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

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.