Python错误 - "ImportError: 无法导入名称'dist'"

37

我正在使用Ubuntu 16.04,出现以下错误:

Traceback (most recent call last):
  File "/home/omermazig/.virtualenvs/fixi/bin/pip", line 7, in <module>
    from pip import main
  File "/home/omermazig/.virtualenvs/fixi/lib/python3.6/site-packages/pip/__init__.py", line 26, in <module>
    from pip.utils import get_installed_distributions, get_prog
  File "/home/omermazig/.virtualenvs/fixi/lib/python3.6/site-packages/pip/utils/__init__.py", line 23, in <module>
    from pip.locations import (
  File "/home/omermazig/.virtualenvs/fixi/lib/python3.6/site-packages/pip/locations.py", line 9, in <module>
    from distutils import sysconfig
  File "/home/omermazig/.virtualenvs/fixi/lib/python3.6/distutils/__init__.py", line 25, in <module>
    from distutils import dist, sysconfig
ImportError: cannot import name 'dist'

当我运行任何Python程序时,特别是尝试运行"pip freeze"命令时出现了问题。该怎么解决?


5
使用命令 "sudo apt-get install python3-distutils" 可以安装Python3的distutils模块。 - Girish Gupta
sudo apt-get 对我有用!谢谢 - vatsalay
6个回答

51

试一下

sudo apt install python3-distutils

2
它为我解决了 ImportError 的问题(在使用 python3.6 的虚拟环境内的 Ubuntu 16.04 中)。 - jfs
在虚拟环境中不存在Ubuntu这样的东西。你一定是指在运行于Ubuntu 16.04上的Python3.6的虚拟环境。 - cryanbhu
11
“python3-distutils已经是最新版本(3.7.3-1ubuntu1)”并没有解决问题(该问题发生在虚拟环境中,而不是系统Python)。 - Gringo Suave

24

我的情况是当我从Ubuntu 18升级到19时,重新安装了Python,需要做的是:

  1. 删除旧的虚拟环境

  2. 创建一个新的虚拟环境

  3. 通过pip在其中安装所需的依赖项


12
是的,我刚刚从19.10升级到20.04,遇到了同样的问题。 - Comm4nd0
1
@Comm4nd0 我也是。但我也无法从旧的 requirements.txt 创建一个新的!应该在 Ubuntu 升级之前完成! - smcs

18

在Ubuntu上安装Python 3.8后,我遇到了这个问题(我的版本是16.04)。

$ lsb_release -d
Description:     Ubuntu 16.04.6 LTS
  1. 重现错误

尝试导入distutils,以重现错误。

$ python3 -c "from distutils import sysconfig"
Traceback (most recent call last):
  File "<string>", line 1, in <module>
ImportError: cannot import name 'sysconfig' from 'distutils' (/usr/lib/python3.8/distutils/__init__.py)

$ sudo apt install python3-distutils          
Reading package lists... Done
Building dependency tree       
Reading state information... Done
E: Unable to locate package python3-distutils

无法找到包python3-distutils

$ sudo apt install python3-distutils          
Reading package lists... Done
Building dependency tree       
Reading state information... Done
E: Unable to locate package python3-distutils
  1. 列出可用的distutils

帮助的方法是使用正则表达式列出所有distutil包。

$ apt list *distutils*
Listing... Done
python-distutils-extra/xenial,xenial 2.39-1 all
python-stsci.distutils/xenial,xenial 0.3.7-4 all
python3-distutils-extra/xenial,xenial 2.39-1 all
python3-stsci.distutils/xenial,xenial 0.3.7-4 all
python3.7-distutils/xenial,xenial 3.7.8-1+xenial1 all
python3.8-distutils/xenial,xenial 3.8.3-1+xenial1 all
python3.9-distutils/xenial,xenial 3.9.0~b4-1+xenial1 all
  1. 安装正确的distutils软件包

对于我的Python 3.8,我选择了python3.8-distutils并且它起作用了。

$ sudo apt-get install -y python3.8-distutils

3
但是,如果系统中仍然安装了python-3.7,它依然会出现问题,并且无法导入缺失的distutils/dist.py文件 :-( - ankostis
$ sudo apt-get install -y python3.8-distutils 已成功安装。 - m9m9m

13

每次我更新Ubuntu版本,都会遇到这个问题,并且总是在SO上找到完全相同的结果,这里是我的解决方案。

如果这里列出的其他解决方案不起作用(安装python3-distutils),可能是系统和虚拟环境之间存在不同的Python版本。

简单的解决方法是销毁你的虚拟环境,然后从头开始重新创建它。


对我很有效!还必须更改 Pipfile 中 [requires] 部分中的 Python 版本。 - Nero Vanbiervliet

0
已解决:我在两年前安装的虚拟环境中遇到了这个问题,使用的是python3.7。
从venv运行pip3或python3.7 -c "from distutils import dist, sysconfig"时,我遇到了错误ImportError: cannot import name 'dist'。
使用系统python 3.9,此错误消失了。
我将/usr/lib/python3.9/distutils复制到python3.7虚拟环境中以解决该问题。

-1

看一下这个(类似的问题):

https://github.com/pypa/pip/issues/5367

可能的解决方法:

  • https://www.python.org/下载Python源代码
  • 解压源代码
  • 安装以下依赖项:

    sudo apt-get install zlib1g-dev(编译Python所需)

  • 并安装:

sudo apt-get install libreadline-gplv2-dev libncursesw5-dev libssl-dev libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev(Pip用于进行SSL请求所需)

  • 编译并安装Python:

/configure

make

make install

  • Python 3.6与Pip应该已经安装好了。

完全归功于jonbesga。


在Ubuntu中从源代码编译东西并不理想,因为它会影响更新和分发集成。 - Herbert

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接