导入请求模块不起作用

Moi*_*aja 2 python python-requests

我在我的系统上安装了请求模块.

pip install requests
Run Code Online (Sandbox Code Playgroud)

现在我试图在rpel中导入请求

import requests
Run Code Online (Sandbox Code Playgroud)

它失败并出现以下错误

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named requests
Run Code Online (Sandbox Code Playgroud)

aba*_*ert 14

造成这种情况的最常见的原因是,你有Python的2.X的两个版本,并且pip在首先出现在你PATH不与走python在首先出现在你的PATH.

有两种方法可以实现.

首先,你可能有,例如,在你/usr/local/bin之前,但你的Python副本没有.所以,当你运行时,那就是安装的.但是,当你跑步的时候,就是这样./usr/binPATH/usr/localpippip install requests/usr/bin/pip/usr/lib/python2.7/site-packagespython/usr/local/bin/python/usr/local/lib/python2.7/site-packages

其次,即使你的两个Python 2.x位于不同的位置,他们也可能希望将pip(和其他脚本和可执行文件)安装到同一个地方.特别是,/usr/bin通常保留用于操作系统或其软件包管理器附带的东西,因此如果您使用/usr/bin/python ez_setup.py或者使用/usr/bin/easy_install pip许多其他常用方法进行安装pip,它可能最终会被安装/usr/local/bin.在这种情况下,它将覆盖任何早期/usr/local/bin/pip与你的/usr/local/bin/python.无论如何,结果基本相同:pip现在意味着/usr/local/bin/pip,但它仍然与您的/usrPython,而不是您的/usr/localPython,并安装到/usr/lib/python2.7/site-packages,/usr/local/bin/python无法看到.

如果您的两个版本是2.7和3.4,则没有问题; 每PEP 394,无论是一切的3.X版本必须与运行python3pip3等,或在2.x版本必须与运行python2pip2等.

如果您的两个版本是例如2.6和2.7,则存在问题,但您可以轻松解决它,因为您应该始终拥有pip2.6python2.6vs. pip2.7python2.7.你可以用自己的混淆pythonpip,但你不必.

如果你的两个版本都是2.7,那么就没有办法消除歧义(除非一直使用完整的绝对路径,否则没有人愿意这样做).

那么,为什么有人会在不知道他们在做什么的情况下安装两个Python 2副本?


最常见的原因是它们在Mac上,它带有Python 2.7,但是他们读了一篇博客文章,告诉他们安装另一个Python并没有解释如何知道他们在做什么.Apple预先安装的Python位于/ usr/bin中,但安装了脚本和二进制文件/usr/local/bin.最流行的替代Python版本是python.org安装程序和Homebrew,/usr/local/bin默认安装到这两个版本.事实上Mac用户往往不如Linux或FreeBSD用户那样精通Unix,但即使没有这个,这也是一个完美的方式来结束成千上万拥有a pip和a python不匹配的人,不知道为什么.

以前几乎所有Mac Python用户都有很好的理由来安装第二个Python.在OS X 10.6之前,Apple预装的Python版本往往过时,有时会破坏.如果Apple只给你2.4,那么安装2.6是有意义的.而这样做是没有问题的,因为python2.4python2.6易于消除歧义.但是苹果公​​司多年来一直在安装2.7.有时很好的理由为什么你需要一个不同的(你需要2.7.7中的错误修复,但Apple给你2.7.5,你需要32位版本,你需要一个额外的电池版本,如Enthought,你需要py2app从中构建捆绑包,......),但这些原因不再适用于大多数人.

事实上,StackOverflow上的很多人似乎都有三个版本的Python 2.7.我不确定为什么这么常见,但他们会使用Homebrew安装Python 2.7,然后使用Python.org或Enthought的安装程序,现在他们有三个Python 2.7版本都在争夺/的所有权USR/local/bin目录.

那么,你怎么解决这个问题呢?

  • 如果您可以使用Python 3.x,那么安装它并使用pip3python3(ipython3和依此类推),路径不再是问题.
  • 如果你不需要第二个Python 2.7,摆脱非Apple的那个,只需使用Apple的.
  • 否则,不要使用Apple的Python,不要为它安装东西,不要触摸它; 对于Apple自己的工具,请不要管它.如果你使用Homebrew,它的Python应该在PATH上更高(确保你以前有/usr/local/bin/usr/bin),它应该让你pip install foo没有sudo,而苹果不会,这使得很难不小心搞砸并安装到错误的.

我还看到至少有一个Windows用户同时拥有这两个,C:\Python27并且D:\Python27两者都是PATHC:一个,但pip只安装了D:.这似乎远不如Mac混淆(可能是因为Windows不附带Python,并且没有包管理器,所以你要获得任何Python的唯一方法是运行安装程序).这里的解决方案更简单:Windows不需要Python,因此您可以删除任何您想要的.


最后,在非Mac*nix系统上,特别是RHEL/CentOS Linux,您可能拥有操作系统所需的Python 2.6或2.4以及您安装的Python 2.7,因为您需要它,或操作系统需要的2.7和安装2.5作为某些"兼容性"包或类似的依赖.无论哪种方式,您都可以轻松地意外地安装pip您实际不使用的那个(特别是如果您使用pip引导程序而不是程序包管理器安装它).

这里的解决方案非常简单:卸载它pip,并使用yum或者apt安装任何python-pip你想要使用的Python 2.7.并养成使用python2.7pip2.7- 或者只是在您的配置文件中添加别名的习惯,以便python或者py或者您喜欢运行什么python2.7.

  • 这是试图写出这个问题的规范答案,因为它是关于我所见过的第69105个问题,但没有一个答案是一般的,而不是特别关于OP的特殊变化.(这些答案中有相当大一部分是我的,所以责怪我吧......)假设碰巧回答了OP的具体问题,如果我们可以将其打造成形状,我可以搜索并重复所有其他问题. (2认同)