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

Top 120 - 240

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

Top 240 - 360

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

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.