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

Top 120 - 240

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

Top 240 - 360

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