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

Top 120 - 240

opentelemetry-exporter-otlp-proto-common ✗ proto-plus ✗ more-itertools ✗ werkzeug ✓ websockets ✓ hatchling ✓ mypy-extensions ✗ networkx ✓ psycopg2-binary ✗ yandexcloud ✗ pynacl ✗ isodate ✗ coverage ✓ opentelemetry-exporter-otlp ✗ python-multipart ✓ decorator ✗ wcwidth ✗ huggingface-hub ✗ flask ✓ msgpack ✓ annotated-doc ✗ openai ✗ pexpect ✓ scikit-learn ✓ ptyprocess ✓ azure-core ✗ distro ✗ kubernetes ✗ joblib ✗ dnspython ✓ msal ✗ matplotlib ✓ redis ✓ fonttools ✓ bcrypt ✗ snowflake-connector-python ✗ threadpoolctl ✗ google-cloud-core ✗ pydantic-settings ✓ jiter ✗ ruamel-yaml ✗ poetry-core ✓ gitpython ✗ async-timeout ✓ kiwisolver ✓ azure-identity ✗ keyring ✓ tabulate ✗ asn1crypto ✗ itsdangerous ✓ types-requests ✓ ruff ✗ prompt-toolkit ✗ alembic ✓ jaraco-classes ✓ deprecated ✗ secretstorage ✓ google-resumable-media ✗ google-crc32c ✓ typer ✗ prometheus-client ✗ chardet ✗ jeepney ✓ opentelemetry-instrumentation ✗ docker ✗ blinker ✓ smmap ✗ paramiko ✗ tzlocal ✗ gitdb ✗ contourpy ✓ rapidfuzz ✓ cycler ✗ defusedxml ✗ orjson ✓ google-api-python-client ✗ zstandard ✗ cloudpickle ✗ editables ✗ backoff ✗ pytest-cov ✗ durationpy ✓ jaraco-functools ✓ jaraco-context ✓ transformers ✓ dill ✗ pyproject-hooks ✓ build ✗ fastjsonschema ✗ pytest-asyncio ✓ azure-storage-blob ✗ sympy ✗ msal-extensions ✗ setuptools-scm ✗ google-auth-oauthlib ✗ textual ✗ uritemplate ✓ google-cloud-bigquery ✗ mpmath ✗ google-auth-httplib2 ✗ tokenizers ✗ mako ✗ httplib2 ✓ marshmallow ✓ babel ✗ gcsfs ✓ hf-xet ✗ ipython ✓ sqlparse ✗ toml ✗ nodeenv ✗ uv ✗ email-validator ✗ aiofiles ✗ jsonpointer ✗ python-json-logger ✗ pre-commit ✓ watchfiles ✗ traitlets ✓ xmltodict ✗

Top 240 - 360

parso ✗ opensearch-py ✓ tornado ✗ cython ✗ importlib-resources ✓ opentelemetry-instrumentation-requests ✗ jedi ✗ google-cloud-aiplatform ✗ py4j ✗ opentelemetry-util-http ✗ docstring-parser ✗ uvloop ✗ identify ✓ requests-aws4auth ✗ mypy ✗ gunicorn ✓ matplotlib-inline ✗ cfgv ✓ executing ✗ nest-asyncio ✗ black ✓ asttokens ✗ asgiref ✗ markdown ✓ langchain-core ✓ ply ✓ dbt-core ✓ tiktoken ✓ sentry-sdk ✗ grpc-google-iam-v1 ✗ google-cloud-secret-manager ✗ httptools ✓ mcp ✓ webencodings ✓ awswrangler ✓ cachecontrol ✓ stack-data ✗ pure-eval ✗ httpx-sse ✗ pymysql ✓ torch ✓ dbt-adapters ✓ pymongo ✗ typedload ✓ sse-starlette ✗ databricks-sdk ✗ watchdog ✗ pkginfo ✗ jsonpatch ✗ debugpy ✗ termcolor ✓ events ✓ wsproto ✓ pytest-xdist ✗ aioitertools ✓ isort ✓ botocore-stubs ✗ execnet ✗ types-awscrt ✗ pyzmq ✗ typing-inspect ✗ dulwich ✓ msrest ✗ pycryptodome ✗ dbt-common ✓ opentelemetry-exporter-prometheus ✗ ruamel-yaml-clib ✗ pysocks ✓ typer-slim ✗ jsonpath-ng ✗ boto3-stubs ✗ types-s3transfer ✗ h2 ✗ hyperframe ✗ hpack ✗ aliyun-python-sdk-core ✗ authlib ✗ poetry ✓ xxhash ✗ pytest-mock ✗ nvidia-nccl-cu12 ✗ lz4 ✗ mccabe ✗ notebook ✗ croniter ✗ datasets ✗ multiprocess ✗ litellm ✗ safetensors ✗ azure-common ✗ grpcio-health-checking ✗ ipykernel ✓ pendulum ✗ crashtest ✗ jupyter-core ✓ arrow ✗ langsmith ✓ slack-sdk ✗ selenium ✓ cleo ✗ poetry-plugin-export ✓ installer ✓ deepdiff ✗ numba ✓ shapely ✓ datadog ✗ invoke ✗ dataclasses-json ✗ mypy-boto3-s3 ✗ requests-file ✓ tree-sitter ✓ rfc3339-validator ✓ jupyter-client ✓ snowflake-sqlalchemy ✗ tinycss2 ✓ pycodestyle ✓ pygithub ✗ google-cloud-batch ✗ future ✗ narwhals ✗

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.