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

Top 120 - 240

shellingham ✗ opentelemetry-api ✗ proto-plus ✗ pynacl ✗ websocket-client ✗ pexpect ✓ ptyprocess ✓ google-cloud-storage ✗ opentelemetry-semantic-conventions ✗ mypy-extensions ✗ msgpack ✓ hatchling ✓ huggingface-hub ✗ psycopg2-binary ✗ scikit-learn ✓ snowflake-connector-python ✗ coverage ✓ decorator ✗ python-multipart ✗ transformers ✗ networkx ✓ sortedcontainers ✓ wcwidth ✗ azure-core ✗ websockets ✗ azure-identity ✗ async-timeout ✓ msal ✗ gitpython ✗ dnspython ✓ bcrypt ✗ threadpoolctl ✗ annotated-doc ✗ openai ✗ asn1crypto ✗ joblib ✗ smmap ✗ google-cloud-core ✗ matplotlib ✓ gitdb ✗ distro ✗ deprecated ✗ fonttools ✓ keyring ✓ tabulate ✗ itsdangerous ✓ chardet ✗ prompt-toolkit ✗ ruamel-yaml ✗ google-cloud-bigquery ✗ google-resumable-media ✗ poetry-core ✗ paramiko ✗ secretstorage ✓ dill ✗ google-crc32c ✗ pydantic-settings ✓ jaraco-classes ✓ setuptools-scm ✗ pyproject-hooks ✓ redis ✓ kiwisolver ✓ alembic ✓ google-api-python-client ✗ blinker ✓ jeepney ✓ typer ✗ jiter ✗ rapidfuzz ✓ google-auth-oauthlib ✗ backoff ✗ fastjsonschema ✗ ruff ✗ zstandard ✗ build ✗ cycler ✗ tzlocal ✗ langsmith ✓ orjson ✗ tokenizers ✗ uritemplate ✓ defusedxml ✗ msal-extensions ✗ pytest-cov ✗ ruamel-yaml-clib ✗ jaraco-functools ✓ contourpy ✓ google-auth-httplib2 ✗ httplib2 ✓ google-cloud-batch ✗ docker ✗ google-cloud-secret-manager ✗ sqlparse ✗ grpcio-health-checking ✗ azure-storage-blob ✗ jaraco-context ✓ aliyun-python-sdk-core ✗ types-requests ✓ py4j ✗ marshmallow ✓ xmltodict ✗ argcomplete ✗ langchain ✓ pytest-asyncio ✓ hf-xet ✗ google-analytics-admin ✗ kubernetes ✗ prometheus-client ✗ ipython ✓ mako ✗ nodeenv ✗ importlib-resources ✓ email-validator ✗ opentelemetry-instrumentation ✗ cloudpickle ✗ sympy ✗ aiofiles ✗ typedload ✓ uv ✗ cython ✗

Top 240 - 360

jsonpointer ✗ tornado ✗ traitlets ✓ jedi ✗ black ✗ babel ✗ editables ✗ parso ✗ pre-commit ✓ cfgv ✓ mypy ✗ mpmath ✗ identify ✓ toml ✗ nest-asyncio ✗ matplotlib-inline ✗ executing ✗ sentry-sdk ✗ asttokens ✗ docstring-parser ✗ awswrangler ✗ ply ✓ webencodings ✓ grpc-google-iam-v1 ✗ watchfiles ✗ markdown ✓ termcolor ✓ cachecontrol ✓ stack-data ✗ pure-eval ✗ snowflake-sqlalchemy ✗ pymysql ✓ gunicorn ✗ langchain-core ✓ asgiref ✗ tiktoken ✓ aioitertools ✓ sphinx ✓ pyzmq ✗ torch ✓ typing-inspect ✗ pkginfo ✗ pytest-xdist ✗ execnet ✗ uvloop ✗ mcp ✓ multiprocess ✗ pymupdf ✓ opentelemetry-util-http ✗ pymongo ✗ dbt-core ✗ mccabe ✗ debugpy ✗ httpx-sse ✗ python-json-logger ✗ jsonpatch ✗ isort ✓ databricks-sdk ✗ pycodestyle ✓ msrest ✗ pandas-stubs ✓ watchdog ✗ google-cloud-kms ✗ textual ✗ google-cloud-vision ✗ shapely ✓ httptools ✓ boto3-stubs ✗ pycryptodome ✗ dulwich ✗ google-cloud-tasks ✗ dbt-common ✓ google-cloud-monitoring ✗ dbt-adapters ✓ google-cloud-compute ✗ google-cloud-speech ✗ opentelemetry-instrumentation-requests ✗ rfc3339-validator ✓ jsonpath-ng ✗ google-cloud-dlp ✗ poetry ✗ google-cloud-workflows ✗ google-cloud-language ✗ smart-open ✗ azure-common ✗ pendulum ✗ safetensors ✗ slack-sdk ✗ tritonclient ✓ requests-file ✓ future ✗ crashtest ✗ google-cloud-dataform ✗ h2 ✗ installer ✓ datadog ✗ cleo ✗ hyperframe ✗ deepdiff ✗ durationpy ✓ hpack ✗ google-cloud-videointelligence ✗ pypandoc-binary ✗ backports-tarfile ✓ databricks-sql-connector ✗ google-cloud-os-login ✗ jupyter-core ✓ cattrs ✗ scramp ✗ pytest-mock ✗ tinycss2 ✓ userpath ✗ lz4 ✗ dataclasses-json ✗ arrow ✗ google-cloud-redis ✗ notebook ✗ authlib ✗ ipykernel ✓ invoke ✗

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.