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

时间:2018-04-14 22:12:31

标签: python pip

每当我尝试使用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())

之前工作正常,我不知道为什么会抛出这个错误。 我搜索过这个错误,但找不到任何解决方法。

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

34 个答案:

答案 0 :(得分:610)

您必须无意中升级了系统点(可能通过类似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

如果您想继续进入&#34;不受支持的领域&#34; (在系统软件包管理器之外升级系统软件包),您可以使用python3 -m pip ...代替pip3

答案 1 :(得分:58)

可以通过修改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 写入更改并退出。

希望这会做!

答案 2 :(得分:53)

对于Ubuntu家族,Debian,Linux Mint用户

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

$ python3 -m pip uninstall pip

来自python3-pip debian软件包的Ubuntu / Debian pip v8.1.1(16.04)(参见$ pip3 -V)显示与最新pip v10.0.1相同的搜索结果,并安装PyPI的最新模块就好了。它有一个工作pip命令(已在$ PATH中),加上自2016年以来默认修补的--user选项。查看pip release notes,较新的版本主要是关于使用 - 特定的错误修复和某些新功能,所以每个人都必须急于升级pip。无论如何,新的pip 10可以部署到Python virtualenvs。

但无论点数如何,您的操作系统都允许使用APT快速安装常见的Python模块(包括numpy),而无需点,例如:
$ sudo apt install python3-numpy python3-scipy(具有系统依赖性)
$ sudo apt install python3-pip(Debian-patched pip,略长,但没关系)

  

Quick apt语法提醒(详情请参阅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;对于Python 3,前缀为python3-(例如python3-pandas)。有数千个,他们在Debian和Ubuntu中进行集成测试。除非您寻求按用户级别(pip install --user选项)或virtualenv / venv安装,否则apt可能就是您所需要的。这些系统包也可以从虚拟环境访问,因为如果您的环境没有给定模块的副本,virtualenv将优雅地回退到导入时使用系统库。 您在--user中自定义安装(使用pip ~/.local/lib)每用户模块也会覆盖它们。

注意,由于这是system-wide安装,因此您很少需要删除它们(需要注意操作系统依赖性)。这对于具有许多系统依赖性的包(例如scipy或matplotlib)很方便,因为APT将跟踪并提供所有必需的系统库和C扩展,而pip则为no such guarantees

事实上,对于系统范围的Python包(与每用户,主目录级别或更低级别相比),Ubuntu expects使用APT包管理器(而不是sudo pip)来避免打破操作系统:sudo pip3的目标是APT存储操作系统敏感模块的同一/usr/lib/python3/dist-packages目录。最近的Debian / Ubuntu版本在很大程度上依赖于Python 3,因此其预安装的模块由apt管理,不应更改。

因此,如果您使用pip3 install命令,请确保它在隔离的虚拟开发环境中运行,例如使用virtualenvsudo apt install python3-virtualenv)或内置Python3({ {1}}),或者在每个用户级别(-m venv pip选项,默认情况下,自2016年以来Ubuntu提供的点数),但系统范围(从不{{1}因为pip interferes与APT包管理器的操作有关,并且当系统使用的python模块意外更改时可能会影响Ubuntu OS components。祝你好运!

P。 S。以上所有内容均适用于“理想”解决方案(Debian / Ubuntu方式)。

如果仍然想要专门使用新的pip3 v10,则有3种快速解决方法:

  • 只需打开一个新的bash会话(一个新的终端选项卡,或键入--user) - 并且pip3 v10变为可用(请参阅sudo pip3)。 debian的pip3 v8仍然安装但已损坏;或
  • 命令bash刷新$ PATH中的pip3路径名。 debian的pip3 v8仍然安装但已损坏;或
  • 命令pip3 -V完全卸载debian的pip3 v8,支持你的新pip3 v10。

注意:除非您在virtualenv中,否则您将始终需要向任何非debian提供的点添加$ hash -d pip3 && pip3 -V标志! (它将python包部署到$ sudo apt remove python3-pip && hash -d pip3,自2016年起默认使用debian / ubuntu提供的python3-pip和python-pip)。 Ubuntu / Debian并不真正支持您在virtualenv之外使用系统范围内的pip 10。永远不会--user

进一步详情:
https://github.com/pypa/pip/issues/5221#issuecomment-382069604
https://github.com/pypa/pip/issues/5240#issuecomment-381673100

答案 3 :(得分:40)

仅一步解决。

我也遇到了这个问题,但是可以简单地通过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

答案 4 :(得分:19)

使用python -m pip install代替pip install

示例:

python -m pip install --user somepackage
python3 -m pip install --user somepackage

pip(分别为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中进行了测试。

答案 5 :(得分:14)

您可以通过重新安装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

答案 6 :(得分:13)

检查pip是否已缓存在另一条路径上,为此,请调用 $ which pip 并检查路径是否与错误中提示的路径不同,如果这是案例运行:

$ hash -r

当缓存清除时,pip将再次运行。 参考:http://cheng.logdown.com/posts/2015/06/14/-usr-bin-pip-no-such-file-or-directory

答案 7 :(得分:7)

我正在使用sudo apt但没有sudo pip的系统上运行。 (并且没有su访问权限。)我按照pip的建议进入了同样的情况:

  

您正在使用pip版本8.1.1,但是18.0可用。您应该考虑通过“ pip install --upgrade pip”命令进行升级。

由于我没有足够的管理员权限,因此其他修复程序均无法使用。但是,通过阅读以下内容,我有些不安:

  • 我不应该这样做。当然,点子告诉我。撒谎了。
  • 使用--user通过专注于仅用户目录来解决很多问题。

因此,我发现此命令行可正常工作以将我恢复到原来的状态。如果您使用的版本与8.1.1不同,显然您会希望更改该行的该部分。

python -m pip install --force-reinstall pip==8.1.1 --user

那是唯一对我有用的东西,但是效果很好!

答案 8 :(得分:3)

上面的命令对我来说不起作用,但是它们非常有用:

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

答案 9 :(得分:3)

我在Ubuntu 16.04系统上遇到了同样的问题。我设法通过使用以下命令重新安装pip来修复它:

curl https://bootstrap.pypa.io/get-pip.py | sudo python3

答案 10 :(得分:2)

使用python3 -m pip install --user pip==9.0.1(或有效版本)恢复

答案 11 :(得分:2)

使用新的LXC(strech)在Pixelbook上发生了同样的事情。这个解决方案与接受的解决方案非常相似,只有一个微妙的区别,对我来说是固定的pip3。

sudo python3 -m pip install --upgrade pip

这突破了版本,现在它按预期工作。

我在这里找到了...... Python.org:Ensure pip is up-to-date

答案 12 :(得分:2)

我使用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]

答案 13 :(得分:1)

在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)

答案 14 :(得分:1)

使用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)

pip的新10.0.1版本可能不会更新/ usr / bin中的二进制文件吗?

答案 15 :(得分:1)

欺骗并工作

  

sudo -H pip install lxml

答案 16 :(得分:1)

对于Python 2.7版,@ Anthony解决方案可以完美实现,方法是将 python3 更改为 python ,如下所示:

sudo python -m pip uninstall pip && sudo apt install python-pip --reinstall

答案 17 :(得分:0)

在执行任何pip命令之前使用以下命令

hash -d pip

它将起作用

答案 18 :(得分:0)

我使用以下代码加载了可能需要安装的模块,从而避免了该错误(我也遇到了)-使用最新的Python和最新的pip没问题

try
  from colorama import Fore, Back, Style
except:
  !pip install colorama
  from colorama import Fore, Back, Style

答案 19 :(得分:0)

这对我有用!

hash -r pip # or hash -d pip

现在,卸载pip安装的版本,然后使用以下命令重新安装。

python -m pip uninstall pip  # sudo
sudo apt install --reinstall python-pip

如果点中断,请使用:

python -m pip install --force-reinstall pip

希望有帮助!

答案 20 :(得分:0)

您可以简单地使用update-alternatives

修复pip和pip3路径

您应该检查的第一件事是您当前的$PATH 运行echo $PATH,然后您会发现/usr/local/bin是pip3和pip通常所在的地方

您的系统在这里/bin/pip/bin/pip3发生了变化 因此,我会说,通过添加到您的~/.bash_profile文件中来修复PATH,以使其持久化

export PATH=$PATH:/usr/local/bin 然后用which pipwhich pip3

检查是否固定

如果没有,则使用update-alternatives进行最终修复

update-alternatives --install /bin/pip3 pip3 /usr/local/bin/pip3 30

如果您想将pip指向pip3,则

update-alternatives --install /bin/pip pip /usr/local/bin/pip3 30

答案 21 :(得分:0)

请运行以下命令进行修复。运行python3 -m pip install --upgrade pip后,请运行以下命令。

hash -r pip

来源:https://github.com/pypa/pip/issues/5221

答案 22 :(得分:0)

当我想将系统pip pip3从9.0.1升级到19.2.3时,我也遇到了这个问题。

运行pip3 install --upgrade pip后,pip版本变为19.2.3。但是main()的最新版本已移至pip._internal中,从而使pip3失效。

因此,在文件/usr/bin/pip3中,将line 9from pip import main替换为from pip._internal import main。该问题将得到解决,其对python2-pip的作用相同。 (在Ubuntu 18.04发行版上测试)

根据@Vincent H.的answer

答案 23 :(得分:0)

您可以尝试以下方法:

sudo ln -sf $( type -P pip ) /usr/bin/pip

答案 24 :(得分:0)

对于它的价值,我遇到了pip(不是pip2pip3)的问题:

$ 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)

答案 25 :(得分:0)

此错误可能是权限错误。因此,请使用 -H 标志测试执行命令:

sudo -H pip3 install numpy

答案 26 :(得分:0)

python3.6 -m pip install scipy 

使用上述命令安装到特定目录:)

答案 27 :(得分:0)

在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”,则您的点会损坏并显示“找不到主要”错误。

答案 28 :(得分:0)

从pip._internal导入主

from pip._internal import main

从以下位置编辑点子代码

sudo nano /usr/bin/pip3

答案 29 :(得分:0)

我也遇到同样的错误,但是python -m pip仍在工作,因此我使用核选项sudo python -m pip install --upgrade pip进行了修复。它为我做到了。

答案 30 :(得分:0)

大家好!我有同样的问题并解决了。这是我的解决方案。 首先,当我运行pip install之类的东西时,出现了如下错误:

Traceback (most recent call last):
  File "/usr/bin/pip3", line 9, in <module>
    from pip import main
ImportError: cannot import name 'main'

因此,我将CD放入文件/ 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())

然后我认为它不在安装路径中。因此,我将cd插入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在此问题上没有区别。 如果我的解决方案能够解决您的问题,我将很高兴!

答案 31 :(得分:0)

如@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。我只是删除了旧文件夹,现在一切正常!

答案 32 :(得分:-1)

当生成文件/ usr / bin / pip时,软件包有问题, 您必须更改导入:

from pip import main

from pip._internal import main

这解决了这个问题,我不确定为什么会产生该问题,但是在以下问题中却说得很清楚:

After pip 10 upgrade on pyenv "ImportError: cannot import name 'main'"

答案 33 :(得分:-1)

问题::在至少Ubuntu 16.04上将pip升级到v10时,pip3命令停止工作(“无法导入主文件”)。 See issue detail

解决方案:您需要添加到bashrc //调整路径,但是您可以通过以下方式进行调整:

$('#inputGroupFile2').on("change", previewImages2);

关于pipenv:pipenv将pip3升级到大于10.0.0的版本。 Dan Ryan(Pipenv维护者)推荐这里介绍的解决方案。