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

Top 120 - 240

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

Top 240 - 360

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

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.