You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

WSL Ubuntu 22.04环境下Python 3.8安装pip时遭遇distutils.cmd模块缺失问题求助

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'

解决方法

我自己折腾后找到两个靠谱的方案,亲测有效:

  1. 先安装Python 3.8对应的distutils包
    这是解决distutils.cmd缺失的核心步骤,因为deadsnakes提供的Python 3.8没有默认包含distutils,需要单独安装对应版本的包:

    sudo apt install python3.8-distutils
    
  2. 为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
      
  3. 验证安装结果
    运行以下命令确认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

火山引擎 最新活动