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

Top 120 - 240

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

Top 240 - 360

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