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

Top 120 - 240

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

Top 240 - 360

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