当前位置: 首页 > 知识库问答 >
问题:

升级pip后出错:无法导入名称“main”

司寇祺
2023-03-14

每当我试图安装任何包使用pip,我得到这个导入错误:

guru@guru-notebook:~$ pip3 install numpy
Traceback (most recent call last):
  File "/usr/bin/pip3", line 9, in <module>
    from pip import main
ImportError: cannot import name 'main'


guru@guru-notebook:~$ cat `which pip3`
#!/usr/bin/python3
# GENERATED BY DEBIAN

import sys

# Run the main entry point, similarly to how setuptools does it, but because
# we didn't install the actual entry point from setup.py, don't use the
# pkg_resources API.
from pip import main
if __name__ == '__main__':
    sys.exit(main())

早些时候它工作得很好,我不知道它为什么会抛出这个错误。我已经搜索了这个错误,但是找不到任何可以修复它的东西。

如果你需要任何进一步的细节,请告诉我,我会更新我的问题。

共有3个答案

高胜
2023-03-14

感谢Anthony的上述解释,您可以保留原始系统pip(在/usr/bin/和dist packages/中)并删除手动安装的pip(在~/.local/中)以解决冲突:

$python3-m pip卸载pip

Ubuntu/Debian pip v8.1.1 (16.04)从python3-pipdebian包(参见$pip3-V)显示了与最新pip v10.0.1相同的搜索结果,并从PyPI安装了最新的模块。它有一个工作的pip命令(已经在$PATH中),加上自2016年以来默认插入的尼斯--user选项。看看pip发布说明,新版本主要是关于特定于用例的bug修复和某些新功能,所以不是每个人都要急着升级pip。无论如何,新的pip 10可以部署到Python虚拟环境中。

但是不管是什么pips,你的html" target="_blank">操作系统都允许使用APT快速安装通用的Python模块(包括Numpy),而不需要pip,例如:
$sudo apt安装python3-Numpy python3-sipy(与系统依赖)
$sudo apt安装python3-pip(Debian补丁的pip,稍旧,但没关系)

快速apt语法提醒(详见man apt):
$sudo apt更新(从最新来源重新同步Ubuntu包索引文件)
$apt搜索

前缀为python-的包名用于Python 2;前缀为python3-的包名用于Python 3(例如python3-熊猫)。有数千个,他们在Debian和Ubuntu中进行集成测试。除非您寻求在每个用户级别(pip Inste--user选项)或虚拟环境/venv中安装,否则apt可能是您需要的。这些系统包也可以从虚拟环境中访问,因为如果你的环境没有给出模块的副本,虚拟环境将优雅地回到导入时使用系统库。您自定义安装的(带有pip--user~/. local/lib中的每个用户模块也将覆盖它们。

注意,由于这是一个系统范围的安装,您很少需要删除它们(需要注意操作系统的依赖性)。这对于具有许多系统依赖项的软件包(如scipy或matplotlib)来说是很方便的,因为APT将跟踪并提供所有必需的系统库和C扩展,而对于pip,您没有这样的保证。

事实上,对于系统范围内的Python包(与每个用户、主目录级别或更低级别相反),Ubuntu期望使用APT包管理器(而不是sudo pip)来避免破坏操作系统: sudo pip的目标是相同的APT存储OS敏感模块的目录。最近的Debian/Ubuntu版本非常依赖Python 3,所以它的预装模块由apt管理,不应该改变。

因此,如果您使用pip3 install命令,请确保它在一个隔离的虚拟开发环境中运行,例如使用virtualenv(sudo apt install python3 virtualenv),或使用python3内置(-m venv),或按用户级别(--userpip选项,自2016年以来在Ubuntu提供的pip中默认),但不是全系统(决不sudopip3!),因为当系统使用的python模块意外更改时,pip会干扰APT软件包管理器的操作,并可能影响Ubuntu OS组件。祝你好运

P.所有这些都是理想的解决方案(Debian/Ubuntu方式)。

如果您仍想独家使用新的pip3 v10,有3种快速解决方法:

  • 只需打开一个新的bash会话(一个新的终端选项卡,或键入bash),pip3 v10就可以使用了(请参见pip3-V)。debian的PIP3V8仍然安装,但已损坏;或
  • 命令$hash-dpip3

注意:除非您是在virtualenv中,否则您将始终需要向任何非debian提供的pip添加--user标志!(它将python包部署到~/.local/,自2016年以来默认为debian/ubuntu提供的python3 pip和python pip)。Ubuntu/Debian并不真正支持在virtualenv之外的系统范围内使用PIP10。永远不要sudopip3

更多详细信息:
https://github.com/pypa/pip/issues/5221#issuecomment-382069604
https://github.com/pypa/pip/issues/5240#issuecomment-381673100

拓拔奇
2023-03-14

我们可以通过修改pip文件来清除错误。

检查文件的位置:

$ which pip

路径-

转到该位置(/usr/bin/pip)并打开终端

输入:$sudo纳米pip

你可以看到:

import sys
from pip import main
if __name__ == '__main__':
     sys.exit(main())

更改为:

import sys
from pip import __main__
if __name__ == '__main__':
     sys.exit(__main__._main())

然后按ctrl o键写入更改并退出

希望这样就可以了!!

闻人鸿飞
2023-03-14

您一定是无意中升级了您的系统pip(可能是通过类似于sudo pip的安装pip-升级

第10点。x调整其内部构件的位置。您看到的pip3命令是由您的包维护人员提供的(大概是基于debian的吧?)并且不是由pip管理的文件。

你可以在Pip的问题跟踪器上读到更多

您可能不想升级您的系统pip,而是使用虚拟环境。

要恢复pip3二进制文件,您需要sudo python3-m pip卸载pip

如果您想继续在“不受支持的领域”(在系统包管理器之外升级系统包),您可能可以使用python3-m pip 而不是pip3

 类似资料:
  • 问题内容: 每当我尝试使用pip安装任何软件包时,都会收到此导入错误: 之前它运行良好,我不确定为什么会引发此错误。我已经搜索了此错误,但找不到任何可修复的错误。 如果你需要更多详细信息,请告诉我,我将更新我的问题。 问题答案: 你必须不经意间升级了系统(可能通过) pip 10.x调整其内部位置。pip3你看到的命令是你的软件包维护者提供的(这里大概是基于debian的?),而不是pip管理的文

  • 我正在尝试运行Buildroot(2017.02)的scanpypi脚本-支持脚本,但是我得到了ImportError:cannotimport name get_importer。 回溯(最后一次调用):文件“/support/scripts/scanpypi”,第52行,导入setuptools文件“/usr/local/lib/python2.7/dist-packages/setuptoo

  • 以下是使用TensorFlow Hub进行TFLite迁移学习教程,第一步是 设置: 出现错误:ImportError:尝试后无法导入名称“export_saved_model” 根据此答案,引发了另一个错误:ImportError:无法导入名称“squareze_or_expand_dimensions” 另外,我尝试了,并提出了另一个错误…

  • 问题内容: 我有两个文件, app.py mod_login.py 而python返回此错误: 如果删除from app import app,代码将起作用,但是如何访问? 问题答案: 问题是你有一个循环导入:在app.py中 在mod_login.py中 这在Python中是不允许的。有关更多信息,请参见Python中的循环导入依赖项。简而言之,解决方案是 要么将所有内容收集到一个大文件中 使用

  • 发生此错误时,我的原始代码不包含“导入 resnet”。 似乎错误发生时,导入张量流。