我将 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 安装可能是最好的选择。