ModuleNotFoundError: No module named 'distutils.cmd' - Wed, Nov 9, 2022
ModuleNotFoundError: No module named 'distutils.cmd'
ModuleNotFoundError: No module named ‘distutils.cmd’
提示: Python 3.12已发布,建议使用Python 3.8+版本。
问题背景
virtualenv 安装非host版本的python环境时,找不到包distutils。
解决方法
方法1:安装distutils包
# Ubuntu/Debian
sudo apt-get install python3.8-distutils
# 或
sudo apt-get install python3.9-distutils
sudo apt-get install python3.10-distutils
# CentOS/RHEL
sudo yum install python38-distutils
方法2:使用ensurepip
# Python 3.6+自带ensurepip
python3 -m ensurepip --upgrade
# 或
python3 -m pip install --upgrade pip
方法3:手动安装setuptools
# 下载get-pip.py
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
# 使用指定Python版本安装
python3.8 get-pip.py
完整示例
# 1. 安装Python 3.8
sudo apt update
sudo apt install python3.8 python3.8-venv python3.8-dev
# 2. 安装distutils
sudo apt install python3.8-distutils
# 3. 创建虚拟环境
python3.8 -m venv myenv
# 4. 激活虚拟环境
source myenv/bin/activate
# 5. 安装依赖
pip install -r requirements.txt
Python 3.12+ 注意事项
Python 3.12移除了distutils,需要使用setuptools:
# 安装setuptools
pip install setuptools
# 或在requirements.txt中添加
setuptools>=65.0.0
使用pyenv管理多版本
# 安装pyenv
curl https://pyenv.run | bash
# 安装Python版本
pyenv install 3.8.18
pyenv install 3.10.13
# 设置全局版本
pyenv global 3.10.13
# 创建虚拟环境
pyenv virtualenv 3.8.18 myenv38
pyenv activate myenv38
最佳实践
- 使用venv:Python 3.3+推荐使用venv而不是virtualenv
- 明确Python版本:在项目中指定Python版本要求
- 使用requirements.txt:明确依赖和版本
- Docker环境:使用Docker确保环境一致性