每当我尝试使用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())
它之前工作正常,我不知道为什么它会抛出这个错误。我搜索了这个错误,但找不到任何解决方法。
如果您需要任何进一步的细节,请告诉我,我会更新我的问题。
你必须无意中升级你的系统点(可能通过像sudo pip install pip --upgrade
这样的东西)
pip 10.x调整其内部所在的位置。您看到的pip3
命令是由您的软件包维护者提供的(可能是debian基于此处?)而不是由pip管理的文件。
你可以在pip's issue tracker上阅读更多相关信息
您可能希望不升级系统点,而是使用virtualenv。
要恢复pip3
二进制文件,你需要sudo python3 -m pip uninstall pip && sudo apt install python3-pip --reinstall
。
如果您想继续“不受支持的区域”(在系统软件包管理器之外升级系统软件包),您可以使用python3 -m pip ...
而不是pip3
。
使用新的LXC(strech)在Pixelbook上发生了同样的事情。这个解决方案与接受的解决方案非常相似,只有一个微妙的区别,对我来说是固定的pip3。
sudo python3 -m pip install --upgrade pip
这突破了版本,现在它按预期工作。
我在这里发现了...... Python.org:Ensure pip is up-to-date
使用python3 -m pip install --user pip==9.0.1
(或有效的版本)恢复
上面的命令对我不起作用,但这些非常有帮助:
sudo apt purge python3-pip
sudo rm -rf '/usr/lib/python3/dist-packages/pip'
sudo apt install python3-pip
cd
cd .local/lib/python3/site-packages
sudo rm -rf pip*
cd
cd .local/lib/python3.5/site-packages
sudo rm -rf pip*
sudo pip3 install jupyter
我使用sudo apt remove python3-pip
然后pip
工作。
~ sudo pip install pip --upgrade
[sudo] password for sen:
Traceback (most recent call last):
File "/usr/bin/pip", line 9, in <module>
from pip import main
ImportError: cannot import name 'main'
➜ ~ sudo apt remove python3-pip
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages were automatically installed and are no longer required:
libexpat1-dev libpython3-dev libpython3.5-dev python-pip-whl python3-dev python3-wheel
python3.5-dev
Use 'sudo apt autoremove' to remove them.
The following packages will be REMOVED:
python3-pip
0 upgraded, 0 newly installed, 1 to remove and 0 not upgraded.
After this operation, 569 kB disk space will be freed.
Do you want to continue? [Y/n] y
(Reading database ... 215769 files and directories currently installed.)
Removing python3-pip (8.1.1-2ubuntu0.4) ...
Processing triggers for man-db (2.7.5-1) ...
➜ ~ pip
Usage:
pip <command> [options]
在ubuntu 18.04.1 Bionic Beaver中,您需要注销并重新登录(不需要重启)才能获得适当的环境。
$ sudo apt install python-pip
$ pip --version
pip 9.0.1 from /usr/lib/python2.7/dist-packages (python 2.7)
$ pip install --upgrade pip
$ pip --version
Traceback (most recent call last):
File "/usr/bin/pip", line 9, in <module>
from pip import main
ImportError: cannot import name main
$ exit
<login>
$ pip --version
pip 18.1 from /home/test/.local/lib/python2.7/site-packages/pip (python 2.7)
使用pip3
修复错误对我有用的是:
sudo cp -v /usr/local/bin/pip3 /usr/bin/pip3
一切正常:
demon@UbuntuHP:~$ pip -V
pip 10.0.1 from /usr/local/lib/python3.5/dist-packages/pip (python 3.5)
demon@UbuntuHP:~$ pip2 -V
pip 10.0.1 from /home/demon/.local/lib/python2.7/site-packages/pip (python 2.7)
demon@UbuntuHP:~$ pip3 -V
pip 10.0.1 from /usr/local/lib/python3.5/dist-packages/pip (python 3.5)
也许新的10.0.1版本的pip不会更新/ usr / bin中的二进制文件?
对于Python版本2.7 @Anthony解决方案工作完美,通过将python3更改为python如下:
sudo python -m pip uninstall pip && sudo apt install python-pip --reinstall
欺骗和工作
sudo -H pip install lxml
我有同样的错误,但python -m pip
仍在工作,所以我用核选项sudo python -m pip install --upgrade pip
修复它。它为我做了。
为了它的价值,我遇到了pip
(不是pip2
或pip3
)的问题:
$ pip -V
Traceback (most recent call last):
File "/usr/bin/pip", line 9, in <module>
from pip import main
ImportError: cannot import name main
$ pip2 -V
pip 8.1.1 from /usr/lib/python2.7/dist-packages (python 2.7)
$ pip3 -V
pip 8.1.1 from /usr/lib/python3/dist-packages (python 3.5)
不知何故(我不记得怎么样)我在~/.local
目录中安装了python的东西。从那里删除了pip目录后,pip
又开始工作了。
$ rm -rf /home/precor/.local/lib/python2.7/site-packages/pip
$ pip -V
pip 8.1.1 from /usr/lib/python2.7/dist-packages (python 2.7)
可以通过修改pip文件来解决该错误
检查文件的位置:
$ which pip
路径 - > / usr / bin / pip
去那个位置/usr/bin/pip
并打开一个终端。
输入:$ sudo nano pip
你可以看到:
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写入更改并退出。
希望这会做!!
from pip._internal import main
编辑pip代码
sudo nano /usr/bin/pip3
研究员!我有同样的问题并解决了它。这是我的解决方案。首先,当我运行pip install某事时,错误就像这样:
Traceback (most recent call last):
File "/usr/bin/pip3", line 9, in <module>
from pip import main
ImportError: cannot import name 'main'
所以,我进入文件/ usr / bin /和cat 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())
然后我认为它不在安装路径中。所以我进入python3-pip,就像这样:
cd /.local/lib/python3.5/site-packages/pip
ps:你必须在计算机中找到正确的方向然后我捕获文件以查看差异(您可以使用其他操作来查看代码):
cat __main__.py
我看到了这个:
from __future__ import absolute_import
import os
import sys
# If we are running from a wheel, add the wheel to sys.path
# This allows the usage python pip-*.whl/pip install pip-*.whl
if __package__ == '':
# __file__ is pip-*.whl/pip/__main__.py
# first dirname call strips of '/__main__.py', second strips off '/pip'
# Resulting path is the name of the wheel itself
# Add that to sys.path so we can import pip
path = os.path.dirname(os.path.dirname(__file__))
sys.path.insert(0, path)
from pip._internal import main as _main # isort:skip # noqa
if __name__ == '__main__':
sys.exit(_main())
所以,你能看出差异吗?我可以弄清楚我必须使文件与/ usr / bin / pip3中的文件相同
所以,我将/.local/lib/python3.5/site-packages/pip中的代码替换为/ usr / bin / pip3中的代码,问题就消失了!
ps:pip3或pip在这个问题上没有区别。如果我的解决方案解决您的问题,我将很高兴!
正如@cryptoboy所说 - 检查你安装的pip / python版本
demon@UbuntuHP:~$ pip -V
demon@UbuntuHP:~$ pip2 -V
demon@UbuntuHP:~$ pip3 -V
然后在.local / lib /文件夹中检查不需要的库。
当我迁移到较新的Kubuntu并且在我的主目录中有.local / lib / python2.7 /文件夹时,我做了设置备份。安装了python 3.6。我刚删除旧文件夹,现在一切都很棒!
在Debian上你需要先更新apt ....
sudo apt-get update -qq
sudo apt-get install python-pip -qq
sudo pip install pip --upgrade --quiet
sudo pip2 install virtualenv --quiet
如果你跳过'sudo apt-get update -qq',你的pip将会损坏并显示'找不到主'错误。
此错误可能是权限之一。因此,使用-H标志测试执行命令:
sudo -H pip3 install numpy
感谢Anthony的解释above,您可以保留原始系统点(在/ usr / bin /和dist-packages /中)并删除手动安装的点(在〜/ .local /中)以解决冲突:
$ python3 -m pip uninstall pip
来自python3-pip
debian软件包(see$ pip3 -V
)的Ubuntu / Debian pip v8.1.1(16.04)显示了与最新的pip v10.0.1相同的搜索结果,并安装了PyPI的最新模块。它有一个工作的pip
命令(已经在$ PATH中),加上自2016年以来默认打补丁的漂亮的--user
选项。看看pip release notes,新版本主要是关于用例特定的错误修复和某些新功能,所以不是每个人都必须急于升级pip。无论如何,新的pip 10可以部署到Python virtualenvs。
但无论点数如何,您的操作系统都允许使用APT快速安装常见的Python模块(包括numpy),而无需使用pip,例如:
$ sudo apt install python3-numpy python3-scipy
(具有系统依赖性)
$ sudo apt install python3-pip
(Debian-patched pip,略长,但没关系)
快速语法提醒(有关详细信息,请参阅
man apt
):$ sudo apt update
(从最新的源重新同步Ubuntu包索引文件)$ apt search <python-package-name>
(全文搜索所有可用的包)$ apt show <python-package-name>
(显示详细的包装说明)$ sudo apt install <python-package-name>
以python-
为前缀的包名称适用于Python 2;并且以python3-
为前缀用于Python 3(例如python3-pandas)。有数千个,他们在Debian和Ubuntu中进行集成测试。除非您寻求按用户级别(pip install --user
选项)或virtualenv / venv安装,否则apt可能就是您所需要的。这些系统包也可以从虚拟环境访问,因为如果您的envs没有给定模块的副本,virtualenv将优雅地回退到导入时使用系统库。您在--user
中自定义安装(使用pip ~/.local/lib
)每用户模块也将覆盖它们。
请注意,由于这是system-wide安装,因此您很少需要删除它们(需要注意操作系统依赖性)。这对于具有许多系统依赖性的包(例如scipy或matplotlib)很方便,因为APT将跟踪并提供所有必需的系统库和C扩展,而使用pip你有no such guarantees。
实际上,对于系统范围的Python软件包(与每用户,家庭目录级别或更低级别相比),Ubuntu expects使用APT软件包管理器(而不是sudo pip
)来避免破坏操作系统:sudo pip3
的目标是同一个/usr/lib/python3/dist-packages
目录,其中APT存储操作系统敏感的模块。最近的Debian / Ubuntu版本在很大程度上依赖于Python 3,因此其预安装的模块由apt
管理,不应更改。
因此,如果您使用pip3 install
命令,请确保它在隔离的虚拟开发环境中运行,例如使用virtualenv(sudo apt install python3-virtualenv
)或内置Python3(-m venv
),或者按用户级别运行(--user
pip选项,默认在Ubuntu提供的pip自2016年以来),但不是系统范围的(从来没有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中,否则你总是需要将--user
标志添加到任何非debian提供的pip中! (它将python包部署到~/.local/
,自2016年起默认使用debian / ubuntu提供的python3-pip和python-pip)。 Ubuntu / Debian并不真正支持您在virtualenv之外使用系统范围内的pip 10。永远不要sudo pip3
!
更多详情: https://github.com/pypa/pip/issues/5221#issuecomment-382069604 https://github.com/pypa/pip/issues/5240#issuecomment-381673100
仅在一步中解决。
我也遇到过这个问题,但是这可以通过1个命令简单地解决,而不必费心并浪费时间,我已经在多个系统上尝试过它,这是解决这个问题最干净的方法。那就是:
对于python3: - sudo python3 -m pip uninstall pip && sudo apt install python3-pip --reinstall
。
这样,您只需使用pip3
安装软件包即可。检查使用pip3 --version
。
对于旧版本,请使用:sudo python -m pip uninstall pip && sudo apt install python-pip --reinstall
。
通过这个,现在你可以使用pip
简单地安装包。检查使用pip --version
。
使用python -m pip install
而不是pip install
例:
python -m pip install --user somepackage
python3 -m pip install --user somepackage
pip
(resp.pip3
)可执行文件由您的发行版(位于Ubuntu 16.04上的python-pip
包)提供,位于/usr/bin/pip
。
因此,当你升级pip时,它不会与pip
包本身保持同步,并且可能会中断。
如果您只是直接使用python -m pip
,例如如:
python -m pip install --user somepackage
python3 -m pip install --user somepackage
它遍历您的Python路径并找到最新版本的pip,并执行该文件。
它依赖于这个文件可以通过import
执行的事实,但这是一种非常标准的接口类型,因此不像破坏性的Debian脚本那样容易破解。
然后我建议在.bashrc
中添加以下别名:
pip() ( python -m pip "$@" )
pip3() ( python3 -m pip "$@" )
在从pip3
9.0.1更新到18.0之后,在Ubuntu 16.04中进行了测试。
检查pip是否已缓存在另一个路径上,为此,调用$ which pip并检查路径是否与错误中提示的路径不同,如果是这样的话:
$ hash -r
缓存清除后,pip将再次运行。参考:http://cheng.logdown.com/posts/2015/06/14/-usr-bin-pip-no-such-file-or-directory
您可以通过重新安装pip来解决此问题。
使用以下命令行命令之一重新安装pip:
Python2:
python -m pip uninstall pip && sudo apt install python-pip --reinstall
Python3:
python3 -m pip uninstall pip && sudo apt install python3-pip --reinstall
我正在运行一个系统,我有sudo apt但没有sudo pip。 (并没有su访问。)我按照pip的建议让自己陷入同样的境地:
您正在使用pip版本8.1.1,但是18.0可用。您应该考虑通过'pip install --upgrade pip'命令进行升级。
没有其他修复工作对我有用,因为我没有足够的管理员权限。然而,在阅读这篇文章时,有些事情困扰着我:
所以,我发现这个命令行可以让我回到原来的位置。如果您使用的是不同于8.1.1的版本,您显然希望更改该部分。
python -m pip install --force-reinstall pip==8.1.1 --user
这是唯一对我有用的东西,但它完美无缺!
我在Ubuntu 16.04系统上遇到了同样的问题。我设法通过使用以下命令重新安装pip来修复它:
curl https://bootstrap.pypa.io/get-pip.py | sudo python3