每当我试图使用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())
我不知道为什么它会抛出这个错误。 我已经找遍了这个错误,但找不到任何东西来修复它。
请让我知道如果你需要任何进一步的细节,我会更新我的问题。
您一定是无意中升级了系统pip(可能是通过
sudo pip install pip --upgrade
之类的方式)pip 10.x调整其内部的位置。您看到的
pip3
命令是您的包维护人员提供的(可能是基于debian的?)并且不是由pip管理的文件。你可以在pip's issue tracker上阅读更多关于这个的信息
您可能希望而不是升级系统pip,而是使用virtualenv。
要恢复
pip3
二进制文件,您需要sudo python3 -m pip uninstall pip && sudo apt install python3-pip --reinstall
。如果您想在“不受支持的区域”(升级系统包管理器之外的系统包)中继续,您可能可以使用
python3 -m pip ...
,而不是pip3
。对于Ubuntu家族、Debian、Linux Mint用户
由于Anthony的解释above,您可以保留原来的系统pip(in/usr/bin/和dist packages/)并删除手动安装的pip(in~/.local/)以解决冲突:
$ python3 -m pip uninstall pip
来自
python3-pip
Debian包的Ubuntu/Debian pip v8.1.1(16.04)显示了与最新pip v10.0.1相同的搜索结果,并且很好地安装了来自PyPI的最新模块。它有一个工作的pip
命令(已经在$PATH中),加上自2016年以来默认修补的nice--user
选项。从pip release notes来看,较新的版本主要是关于特定于用例的bug修复和某些新特性的,因此不是每个人都必须立即升级pip。无论如何,新的pip 10可以部署到Python virtualenvs。但是,不管pip是什么,您的操作系统都允许使用APT快速安装公共Python模块(包括numpy),而不需要pip,例如:
$ sudo apt install python3-numpy python3-scipy
(与系统相关)$ sudo apt install python3-pip
(Debian补丁pip,稍旧,但无所谓)前缀为
python-
的包名称适用于Python 2;前缀为python3-
的包名称适用于python3(例如python3 pandas)。有数千个,他们在Debian和Ubuntu中进行集成测试。除非您试图在每个用户级别(pip install --user
选项)或在virtualenv/venv中安装,否则apt可能是您所需要的。这些系统包也可以从虚拟环境中访问,因为如果您的环境没有提供模块的副本,那么virtualenv将优雅地返回到在导入时使用系统libs。 您在~/.local/lib
中为每个用户模块安装的自定义(使用pip--user
)也将覆盖它们。注意,由于这是一个system-wide安装,您很少需要删除它们(需要注意操作系统依赖性)。这对于具有许多系统依赖项的包(例如使用scipy或matplotlib)很方便,因为APT将跟踪并提供所有必需的系统lib和C扩展,而使用pip则可以获得no such guarantees。
事实上,对于系统范围内的Python包(与每个用户、home dir级别或更低级别相反),Ubuntu expects使用APT包管理器(而不是
sudo pip
)来避免破坏OS:sudo pip3
目标与APT存储OS敏感模块的/usr/lib/python3/dist-packages
目录完全相同。最近的Debian/Ubuntu版本在很大程度上依赖于Python 3,因此它的预装模块由apt
管理,不应该更改。因此,如果您使用
pip3 install
命令,请确保它在一个独立的虚拟开发环境中运行,比如使用virtualenv(sudo apt install python3-virtualenv
),或者使用Python3内置(-m venv
),或者在每个用户级别(--user
pip选项,自2016年以来在Ubuntu提供的pip中是默认的),但是系统范围内的不是(永远不要使用sudo pip3
!),因为pip interferes具有APT包管理器的操作,并且在意外更改系统使用的python模块时可能会影响Ubuntu OS components。祝你好运!p.S.以上都是“理想”解决方案(Debian/Ubuntu方式)。
如果您仍想独占使用新的pip3 v10,有3个快速解决方法:
bash
),pip3 v10就可用了(请参见pip3 -V
)。debian的pip3 v8仍在安装,但已损坏;或$ hash -d pip3 && pip3 -V
刷新$PATH中的pip3路径名。debian的pip3 v8仍在安装,但已损坏;或$ sudo apt remove python3-pip && hash -d pip3
完全卸载debian的pip3 v8,以支持新的pip3 v10。注意:除非您在virtualenv中,否则始终需要向任何非debian提供的pip添加
--user
标志!(它将python包部署到~/.local/
,这是自2016年以来debian/ubuntu提供的python3 pip和pythonpip中的默认设置)。Ubuntu/Debian并不真正支持在virtualenv之外的系统范围内使用pip 10。永远不要sudo pip3
!F型其他详细信息:
https://github.com/pypa/pip/issues/5221#issuecomment-382069604
https://github.com/pypa/pip/issues/5240#issuecomment-381673100
我们可以通过修改pip文件来清除错误。
检查文件的位置:
转到该位置(/usr/bin/pip)并打开终端
输入:
$ sudo nano pip
你可以看到:
更改为:
然后ctrl+o写入更改并退出
希望这样可以!!
相关问题 更多 >
编程相关推荐