ImportError:在Windows 7 32位中运行pip --version命令时无法导入名称main


145

我已经为32位Windows安装了与pip和setuptools捆绑在一起的最新python(2.7.9)。我尝试重新安装pip,但问题仍然存在。

这是pip --version在Administrator cmd中运行后的错误:

Traceback (most recent call last):
 File "D:\Python\lib\runpy.py", line 162, in _run_module_as_main
  "__main__", fname, loader, pkg_name)
 File "D:\Python\lib\runpy.py", line 72, in _run_code 
  exec code in run_globals
 File "D:\Python\Scripts\pip.exe\__main__.py", line 5, in <module>
ImportError: cannot import name main

1
可能与文件权限有关,这里解决了python 3.4的问题,值得检查。
Kobi K

我使用icacls命令进行了变通,但是错误仍然存​​在。
Woootiness,2015年

2
“ easy_install -U pip”答案在stackoverflow.com/questions/28031277/…中提供
。unpack

Answers:


172

尽管最初的问题似乎来自2015年,但这个“错误”似乎也影响了用户的安装pip-10.0.0

解决方法是不修改pip,而是更改pip的调用方式。而不是通过Python本身调用/usr/bin/pipcall pip。例如,代替以下内容:

pip install <package>

如果来自Python版本2(或称为默认Python二进制文件python),请执行以下操作:

python -m pip install <package>

还是从Python版本3:

python3 -m pip install <package> 

是的,我不记得我为解决此问题所做的工作,但我对其他人保持开放态度。
Woootiness

当我使用给定的命令时,我遇到了权限错误(根据catalinpopescu的答案更改了点数之后,我也得到了错误)。但是,要下载适用于用户范围的软件包(以便您不需要管理权限),请使用:python3 -m pip install <package> --user(适用于python3,尽管未经测试,也适用于python2)
randmin

在Mac上对我有帮助。
查尔斯·罗斯(Charles Ross)

更好的答案。修改源代码很麻烦。
ozgur

这是一个非常好的方法。这也很容易确保您使用的版本正确:python2 -m pip install $package
JamesTheAwesomeDude

257

该错误位于pip 10.0.0中。

在Linux中,您需要从以下位置修改文件:/ usr / bin / pip:

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

对此:

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

1
看来这是解决方案。我尝试了这一点,到目前为止没有问题。
顺化

2
我正在使用pip 10.0.1,并且该错误仍然存​​在。您的解决方案有所帮助。谢谢!您是否已将此错误和解决方案报告给开发人员?
阿列克谢Subach

7
尽管此解决方案有效,但请不要对其进行修改pip。请参阅下面的更干净的解决方案,改为pip从Python 调用。
万巴蒂亚尔

1
对“ pip 10.0.1”无效。 pip --version pip 10.0.1 from /home/x/.local/lib/python2.7/site-packages/pip (python 2.7) 用法: sudo pip install tensorflow 输出:Traceback (most recent call last): File "/usr/bin/pip", line 9, in <module> from pip import main ImportError: cannot import name main
user_x

3
不建议使用@creepy_driver,手动修改已安装的软件包以适合环境,因为下次更新到另一个版本(即10.0.3)时,您可能会遇到相同的问题。pip通过已安装的Python 运行的解决方法将使pip正确使用合适的环境。
万巴蒂亚尔

60

在Ubuntu Server 16上,python27也有相同的问题。试试这个:

更改

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

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

1
在Ubuntu 16.04上工作
Sameera Kumarasingha,

这不是一个好主意。正如@RichardElkins在另一个答案中提到的那样:“民间团体不应浪费时间编辑不打算在安装后修改的已安装文件”
juergi

20

在Windows 10上,我使用以下命令降级了pip:

python -m pip uninstall pip
python -m pip install pip==9.0.3

这也应该在Linux和Mac上也可以使用。


1
应该是python -m pip install pip == 9.0.3
elelias

@elelias哦,我没有意识到。谢谢你告诉我!
kiyah

1
我必须这样做python easy_install.py pip==9.0.3是因为在第一行之后,找不到pip。
苏珊娜

3
同样适用于Linux和Mac。在解决pip / pip3 10问题之前,这是一种解决方法。人们不应该浪费他们的时间编辑安装的文件不打算安装后..修改
理查德·埃尔金斯

升级后我遇到了路径问题,我做了以下工作来使其正常工作。sudo python -m pip卸载pip && sudo apt安装python-pip --reinstall
webjockey

10

我遇到了同样的问题,但是使用apt和pip卸载并重新安装对我来说不起作用。

我看到了另一个解决方案,它提供了一种恢复pip3路径的简便方法:

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

1
我有python 2.7,所以我不得不更改命令以匹配python 2.7 sudo python -m pip install pip && sudo apt install python-pip --reinstall
webjockey

可以在ubuntu上完美运行,但我认为它不能在Windows上运行
zaki benz


2

在MacOS上,如果您通过Homebrew安装了python,请在 /usr/local/opt/python/libexec/bin/pip

from pip.internal import main

from pip._internal import main

或使用这种衬板: sed -i '' "s/from pip import main/from pip._internal import main/" /usr/local/opt/python/libexec/bin/pip

说明:

此问题是由于pip版本10中的内部移动名称空间的更改main._internal以及Homebrew仍然从旧位置(以前是版本9中)查找的bin脚本引起的。问题和一些讨论https://github.com/pypa/pip/issues/5240


1

如果您有要插入的硬链接PATH(即,如果安装了多个python版本),然后升级了pip,则也可能会遇到此错误。

解决方案包括再次创建硬链接。甚至更好的是,停止使用硬链接并使用软链接。


1
如何解决这个问题?
user_x '18

1

在Windows 10上,我遇到了同样的问题。PIP 19已安装在我的系统中,但没有显示。错误是No Module Found

python -m pip uninstall pip
python -m pip install pip==9.0.3

降级pip到9.0.3对我来说很好。



0

它适用于Ubuntu 16.04。第1步:

 sudo gedit /home/user_name/.local/bin/pip

将打开一个包含以下内容的文件:

#!/usr/bin/python

# -*- coding: utf-8 -*-
import re
import sys

from pip import main

if __name__ == '__main__':
    sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
    sys.exit(main())

将更main改为__main__,如下所示:

#!/usr/bin/python

# -*- coding: utf-8 -*-
import re
import sys

from pip import __main__

if __name__ == '__main__':
    sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
    sys.exit(__main__._main())

保存文件并关闭它。您完成了!


0

试试这个

#!/usr/bin/python
# 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.i
try:
    from pip import main
except ImportError:
    from pip._internal import main
if __name__ == '__main__':
    sys.exit(main())

0

一个适用于Ubuntu的简单解决方案,但也可以在Windows上解决该问题:

刚打电话

pip install --upgrade pip

0

这在尝试使用python3.6时解决了我在ubuntu 18.04中的问题:

rm -rf ~/.local/lib/python3.6

您可以使用mv将文件夹移动到另一个位置,而不是将其删除,以进行测试:

mv ~/.local/lib/python3.6 ./python3.6_old


0

在我们的案例中,在2020年使用Python3,解决此问题的方法是将Python安装移至cloud-init实例化VM 的启动脚本。

当我们尝试使用VM生命周期中稍后由用户调用的脚本来安装Python时,我们也遇到了相同的错误,但是将相同的Python安装代码移至该cloud-init脚本可以解决此问题。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.