WSL Ubuntu 22.04环境下Python 3.8安装pip时遭遇distutils.cmd模块缺失问题求助
问题描述
我在WSL Ubuntu 22.04环境下,通过deadsnake仓库安装了Python 3.8,本身运行没问题,但尝试安装pip时一直报错找不到distutils.cmd模块。网上大多建议用sudo apt install python3-pip,但这个命令会自动安装Python 3.10,完全不符合我要给3.8装pip的需求。找了很多针对WSL的教程,要么没区别,要么压根不提pip的安装方法。
附上具体报错信息:
Traceback (most recent call last):
File "get-pip.py", line 32267, in
main()
File "get-pip.py", line 135, in main
bootstrap(tmpdir=tmpdir)
File "get-pip.py", line 111, in bootstrap
monkeypatch_for_cert(tmpdir)
File "get-pip.py", line 92, in monkeypatch_for_cert
from pip._internal.commands.install import InstallCommand
File "", line 259, in load_module
File "/tmp/tmp4nc0p6x0/pip.zip/pip/_internal/commands/init.py", line 9, in
File "", line 259, in load_module
File "/tmp/tmp4nc0p6x0/pip.zip/pip/_internal/cli/base_command.py", line 15, in
File "", line 259, in load_module
File "/tmp/tmp4nc0p6x0/pip.zip/pip/_internal/cli/cmdoptions.py", line 24, in
File "", line 259, in load_module
File "/tmp/tmp4nc0p6x0/pip.zip/pip/_internal/cli/parser.py", line 12, in
File "", line 259, in load_module
File "/tmp/tmp4nc0p6x0/pip.zip/pip/_internal/configuration.py", line 26, in
File "", line 259, in load_module
File "/tmp/tmp4nc0p6x0/pip.zip/pip/_internal/utils/logging.py", line 29, in
File "", line 259, in load_module
File "/tmp/tmp4nc0p6x0/pip.zip/pip/_internal/utils/misc.py", line 43, in
File "", line 259, in load_module
File "/tmp/tmp4nc0p6x0/pip.zip/pip/_internal/locations/init.py", line 66, in
File "", line 259, in load_module
File "/tmp/tmp4nc0p6x0/pip.zip/pip/_internal/locations/_distutils.py", line 20, in
ModuleNotFoundError: No module named 'distutils.cmd'
解决方法
我自己折腾后找到两个靠谱的方案,亲测有效:
先安装Python 3.8对应的distutils包
这是解决distutils.cmd缺失的核心步骤,因为deadsnakes提供的Python 3.8没有默认包含distutils,需要单独安装对应版本的包:sudo apt install python3.8-distutils为Python 3.8安装pip
完成第一步后,有两种方式安装pip:- 方法一:使用ensurepip(推荐)
Python自带的ensurepip工具可以直接给指定版本安装pip,命令简单还不容易出错:sudo python3.8 -m ensurepip --upgrade - 方法二:使用get-pip.py
如果ensurepip没生效,可以用官方提供的get-pip脚本,先下载该脚本到本地,然后运行以下命令(指定用Python 3.8执行):sudo python3.8 get-pip.py
- 方法一:使用ensurepip(推荐)
验证安装结果
运行以下命令确认pip已经绑定到Python 3.8:python3.8 -m pip --version如果输出显示pip的版本,且关联的Python路径是3.8的,就说明安装成功了。
为什么之前的方法没用?
Ubuntu 22.04默认的Python版本是3.10,apt install python3-pip会自动安装对应3.10的pip,和你通过deadsnakes装的Python 3.8完全是两个独立的环境,所以这个命令根本解决不了你的问题,必须给3.8单独安装对应的依赖和工具。
备注:内容来源于stack exchange,提问作者dboggs95




