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

Top 120 - 240

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

Top 240 - 360

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

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.