ImportError:无法从“distutils”(/usr/lib/python3.9/distutils/__init__.py)导入名称“sysconfig”

ImportError:无法从“distutils”(/usr/lib/python3.9/distutils/__init__.py)导入名称“sysconfig”

我将 python 更新到 python3.9,当我尝试安装时pip,出现错误:

lors@Lenovo:~$ pip3 install pipenv
Traceback (most recent call last):
  File "/usr/bin/pip3", line 9, in <module>
    from pip import main
  File "/usr/lib/python3/dist-packages/pip/__init__.py", line 29, in <module>
    from pip.utils import get_installed_distributions, get_prog
  File "/usr/lib/python3/dist-packages/pip/utils/__init__.py", line 23, in <module>
    from pip.locations import (
  File "/usr/lib/python3/dist-packages/pip/locations.py", line 9, in <module>
    from distutils import sysconfig
ImportError: cannot import name 'sysconfig' from 'distutils' (/usr/lib/python3.9/distutils/__init__.py)

答案1

我假设您确实更改了 python3 的 update-alternatives。发生了什么事,您在上一个 python 版本中安装了 distutils,但在新版本中没有!而且由于您已将系统链接更改为“update-alternatives”,系统不再使用 python3 的新链接找到它。要解决此问题,您必须将 distutils 安装到 python3.9。

sudo apt install python3.9-distutils

然后您可以使用在终端中写入以下行来测试它:

python3 -c "from distutils import sysconfig"

如果没有回溯,那么一切就都好了。

答案2

答案(正在进行中,合作):审查 PyCharm 错误消息中引用的 locations.py 文件(“无法安装 Kivy 包”)

File "/usr/lib/python3/dist-packages/pip/locations.py", line 9, in <module>
    from distutils import sysconfig
(most recent traceback: 'ImportError: cannot import name 'sysconfig' from 'distutils' (/usr/lib/python3.9/distutils/__init__.py)'

在 locations.py 的第 76 行,有一个代码块,内容如下:

# under macOS + virtualenv sys.prefix is not properly resolved
# it is something like /path/to/python/bin/..
# Note: using realpath due to tmp dirs on OSX being symlinks
src_prefix = os.path.abspath(src_prefix)

# FIXME doesn't account for venv linked to global site-packages

这是一个正在进行的答案,但我们的问题似乎与 locations.py 定义的不一致的 sys.prefix 和/或 src_prefix 值有关,现在进行故障排除和回溯,很快就会更新。编辑/更新:我认为问题出在第 82 行,

# FIXME doesn't account for venv linked to global site-packages

但其中很多内容我都不懂,目前我还没有能力重写 pip 脚本。它链接到的 distutils 目录“/usr/lib/python3.9/distutils/”实际上是空的,并且缺少安装所需的大部分文件,但我还不确定如何就地更改 src_prefix 值以更好地链接到 python3 的工作目录,因为我认为 distutils 在 3.2 之后已被弃用。链接到基础 python3 安装可能是最好的选择。

相关内容