Python 3.12

ModuleNotFoundError: No module named 'distutils'

ModuleNotFoundError: No module named 'distutils'

What it means

Python 3.12 removed the standard-library distutils module (PEP 632).

Why it happens

distutils was deprecated in Python 3.10 and fully removed in 3.12. Code (or a dependency) still imports it. This commonly surfaces after moving a Lambda function or container to a Python 3.12 runtime.

How to fix it

  1. Interim: install setuptools, which still vendors a distutils shim — `pip install 'setuptools<81'` — and ensure it is in your deployment package.
  2. Durable: replace `distutils` usage with `setuptools` and the `packaging` library (e.g. `packaging.version.Version` instead of `distutils.version.LooseVersion`).
  3. Upgrade dependencies that import distutils to versions that no longer do.
  4. Re-test on Python 3.12 locally before redeploying.

Related deadline: Lambda Python 3.9 EOL2027-02-01.

Find every instance in your project

The free EOLkits scanner runs in your browser (nothing uploaded) and flags this and related breakages across your IaC and dependency files.

Primary source: https://docs.python.org/3/whatsnew/3.12.html

Get the full migration audit — $299, hash-anchored PDF →