每当我试图安装任何包使用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())
早些时候它工作得很好,我不知道它为什么会抛出这个错误。我已经搜索了这个错误,但是找不到任何可以修复它的东西。
如果你需要任何进一步的细节,请告诉我,我会更新我的问题。
感谢Anthony的上述解释,您可以保留原始系统pip(在/usr/bin/和dist packages/中)并删除手动安装的pip(在~/.local/中)以解决冲突:
$python3-m pip卸载pip
Ubuntu/Debian pip v8.1.1 (16.04)从python3-pip
debian包(参见$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
),或按用户级别(--user
pip选项,自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
我们可以通过修改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键写入更改并退出
希望这样就可以了!!
您一定是无意中升级了您的系统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”。 似乎错误发生时,导入张量流。