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 only: if the current setuptools documentation still provides a compatible distutils shim, bundle a tested setuptools version with the 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 create/update restrictions2027-02-01.

Check configured patterns in your project

The free EOLkits scanner processes files in your browser and flags selected related patterns in supported IaC and dependency files. File names and contents are not uploaded; bounded aggregate file and finding counts may be sent. It is not a complete source or AWS-account scan.

Prefer a 10-second check? Paste your config into the free AWS EOL checker. Pasted input is not uploaded; bounded first-party usage events may be sent.

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

Inspect the $299 report sample and availability →