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

Top 120 - 240

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

Top 240 - 360

awswrangler ✗ kubernetes ✗ sphinx ✓ aiofiles ✗ pymupdf ✓ editables ✗ matplotlib-inline ✗ nest-asyncio ✗ tornado ✗ typedload ✓ sentry-sdk ✗ opentelemetry-instrumentation ✗ executing ✗ langchain-core ✓ mpmath ✗ bashlex ✓ grpc-google-iam-v1 ✗ asttokens ✗ asgiref ✗ mypy ✗ hf-xet ✗ toml ✗ swe-rex ✓ pytest-asyncio ✓ argcomplete ✗ uvloop ✗ webencodings ✓ ply ✓ termcolor ✓ markdown ✓ torch ✓ cachecontrol ✓ pymongo ✗ dbt-common ✓ dbt-core ✗ stack-data ✗ pure-eval ✗ pymysql ✓ pkginfo ✗ gunicorn ✗ google-cloud-vision ✗ typing-inspect ✗ pypandoc-binary ✗ watchfiles ✗ pytest-xdist ✗ shapely ✓ execnet ✗ google-cloud-kms ✗ python-json-logger ✗ httptools ✓ google-cloud-speech ✗ nodeenv ✗ aioitertools ✓ google-cloud-compute ✗ google-cloud-tasks ✗ google-cloud-monitoring ✗ google-cloud-dlp ✗ docstring-parser ✗ tiktoken ✓ isort ✓ google-cloud-workflows ✗ jsonpatch ✗ google-cloud-language ✗ msrest ✗ pendulum ✗ mccabe ✗ google-cloud-dataform ✗ opentelemetry-util-http ✗ dulwich ✗ datadog ✗ google-cloud-videointelligence ✗ dbt-adapters ✓ debugpy ✗ databricks-sdk ✗ watchdog ✗ google-cloud-os-login ✗ pycryptodome ✗ pycodestyle ✓ poetry ✗ databricks-sql-connector ✗ pre-commit ✓ multiprocess ✗ slack-sdk ✗ jsonpath-ng ✗ future ✗ google-cloud-redis ✗ cattrs ✗ mcp ✓ identify ✓ lz4 ✗ notebook ✗ azure-common ✗ backports-tarfile ✓ smart-open ✗ crashtest ✗ dataclasses-json ✗ rfc3339-validator ✓ google-cloud-memcache ✗ installer ✓ cleo ✗ cfgv ✓ httpx-sse ✗ jupyter-core ✓ textual ✗ ipykernel ✓ arrow ✗ pygithub ✗ opentelemetry-instrumentation-requests ✗ google-cloud-logging ✗ semver ✗ requests-file ✓ pytest-mock ✗ opentelemetry-exporter-prometheus ✗ tinycss2 ✗ scramp ✗ jupyter-client ✓ nvidia-nccl-cu12 ✗ opensearch-py ✗ py ✗ deepdiff ✗

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.