成功安装pip后出现ImportError

42

我已经成功使用 pip install <library-name> 命令安装了一个库。但是,在我尝试导入它时,Python 报错 ImportError: No module named <library-name>。为什么会出现这个错误,我该如何使用已安装的库呢?


1
@BhargavRao 哎呀。我不是完全赞成这里的重复关闭,因为目标问题中的问题非常混乱,充满了“更新”和“编辑”部分。今晚我会看看是否可以整理它。 如果我能够整理好,那么我认为合并这些问题可能是有意义的,这样cel(很好的)答案就可以暴露给其他问题的更大受众。 - Mark Amery
1
@AndrasDeak,谢谢,这似乎是针对这个特定问题更全面的目标,因为答案也指向了同样的解决方案。我现在正在考虑一种不同的方法来将这个问题复制到您的目标中,并让其他问题保持不变。 - Bhargav Rao
1
@AndrasDeak 这是一个合理的批评,如果能够在这个问题或之前的重复目标上以某种方式筛选回答,只留下4个回答,每个回答简洁地涵盖其中一个情况,那将是很好的。 - Mark Amery
1
@Mark,好的,我会将重复部分更改为那个,但我仍然不确定是否需要合并(合并几乎是不可逆的,有点痛苦)。OP似乎也很活跃。我认为最好等待其他用户再确认一下。 - Bhargav Rao
2
@BhargavRao,以及所有参与讨论的人:我通常很愿意通过合并重复问题来改进。我认为重要的是将问题/答案对以某种易于搜索的方式提供出来。我会信任你们在如何合并/改进问题方面的判断力。 - cel
显示剩余14条评论
2个回答

103

简言之:常常存在多个版本的python解释器和pip版本。使用python -m pip install <library-name>来安装库,而不是pip install <library-name>将确保库被安装到默认的python解释器中。

还请注意:从我的个人经验来看,我建议不要使用sudo pip install命令将包安装到系统默认的python解释器中。这可能会导致各种问题的混乱。 当你想要使用sudo调用pip时,请首先检查virtualenv是否是更好的选择。


大多数现代系统都有多个python解释器。每个解释器都维护其自己的已安装软件包集合。在安装新软件包时,重要的是要了解这些软件包实际上被安装到哪个解释器中。

在Unix系统上,可以使用Shell来了解正在发生的情况。

键入which -a python会显示您的PATH中的所有解释器。第一行对应于从命令行运行python时使用的解释器。

/private/tmp/py32/bin/python
/usr/local/bin/python
/usr/bin/python

每个pip版本属于唯一的解释器。which -a pip会显示所有pip版本。再次强调,当您在shell中键入pip时,将调用第一行。

/usr/local/bin/pip
/usr/bin/python
注意,此时python属于安装在/private/tmp/py32/中的解释器,但pip会安装到/usr/local/bin的解释器中。在成功安装库后,您将无法在默认的Python解释器中导入它。
那么如何导入已安装的库呢?
您的第一选择是使用完整路径启动所需的解释器。因此,如果您键入/usr/local/bin/python,您将能够导入库。
第二个(通常更受欢迎)的选项是特别调用正确版本的pip。为此,您可以使用python -m pip install <library-name>而不是pip install <library-name>。这将调用与您默认的Python解释器相对应的pip版本。

现代系统中有多个版本的Python,当你看到/usr/local/bin/python时,通常意味着你已经安装了它。 - Padraic Cunningham
我想要表达的是,不仅有Python,还有多个Python解释器。通常默认情况下会有一个Python2.x和一个Python3.x解释器。嗯,也许我需要重写一下以使我的观点更清晰。 - cel
1
是的,但在Unix上,有默认的系统Python解释器,而不是默认安装多个版本的Python2或3解释器。如果您看到其他解释器,则是您自己安装的。在新安装中,which -a python应返回一个路径,并且应明确指出您不应更改默认Python。如果您不知道自己在做什么,那么使用virtualenv或pyenv是正确的方法。 - Padraic Cunningham
1
当我想要针对不同版本的Python运行代码或测试新功能时,我使用pyenv。而在其他情况下,我使用系统Python,因为我对所有工作原理有很好的理解,但这种理解是通过多年来几次破坏我的操作系统获得的。如果你知道如何使用系统Python,那么使用它是可以的,但是有许多关于“为什么apt-get不再工作”的帖子,这些帖子来自安装了多个Python版本并尝试更改默认版本以纠正“ImportError: No module named <library-name>”错误的人们。 - Padraic Cunningham
@PadraicCunningham,我会考虑添加一个免责声明,指向virtualenvs。人们至少应该有一个参考,以找到避免破坏系统的首选方法。您知道一个问题-答案对,解释为什么sudo pip install是有害的,以及如何设置virtualenv以避免弄乱系统的Python吗? - cel
显示剩余6条评论

2

还有几点需要注意:

  1. 请检查你是否将库安装在想要使用的虚拟环境中。
  2. 有一些库的包名与库的名称不同。你可以查看它们的在线文档(使用关键词 python <library> 在谷歌上搜索通常可以找到信息),看看自己是否正确导入了包。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接