成功安装 pip 后的 ImportError [重复]

Posted

技术标签:

【中文标题】成功安装 pip 后的 ImportError [重复]【英文标题】:ImportError after successful pip installation [duplicate] 【发布时间】:2015-12-17 06:13:41 【问题描述】:

我已经使用pip install <library-name> 成功安装了一个库。但是当我尝试导入它时,python 会引发ImportError: No module named <library-name>。为什么会出现此错误,如何使用已安装的库?

【问题讨论】:

@BhargavRao Yikes。我并不完全同意这里的重复关闭,只是因为欺骗目标的问题是一个可怕的混乱,充满了 UPDATEEDIT 部分。今晚我看看能不能收拾一下。 如果我可以,那么我认为合并这些问题可能是有意义的,这样 cel 的(好的)答案可以从这里暴露给另一个问题的更多受众。 @AndrasDeak,谢谢,这似乎是这个特定问题的更全面的目标,因为答案也指向相同的解决方案。我现在正在考虑另一种方法来将此问题与您的目标相混淆,而不要理会其他问题。 @AndrasDeak 这是一个正当的批评,如果能够以某种方式将这个问题的答案或之前的欺骗目标缩减为 4 个,每个都简洁地涵盖其中一个案例,那就太好了。 @Mark,很酷,我会将副本更改为该副本,但我仍然不确定此处是否需要合并。 (合并是一个小小的痛苦,因为它几乎是不可逆转的)。 OP似乎也很活跃。我觉得还是等几个用户确认一次比较好。 @BhargavRao,以及所有的对话:我通常可以通过合并重复来改进。我认为问题/答案对以某种形式以易于搜索的方式提供是很重要的。我会相信您对如何合并/改进问题的判断。 【参考方案1】:

还有几点:

    检查您是否将库安装到要使用的 virtualenv 中。 有些库的包名与库名不同。您可以在线查看他们的文档(使用关键字python <library> 的google 通常会显示相关信息),看看您是否正确导入了包。

【讨论】:

【参考方案2】:

TL;DR:通常存在多个版本的 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 时,通常意味着您已安装它。 我想说的是,不仅有python,还有多个python解释器。默认情况下通常是 python2.x 和 python3.x 解释器。嗯,也许我必须重写以使我的观点更清楚。 是的,但是在 unix 上有默认的系统 python 解释器,而不是默认安装的多个版本的 python2 或 3 个解释器,如果你看到其他解释器然后你安装了它们,which -a python 应该返回一个路径全新安装,应该非常清楚你不应该使用默认的python。如果您不知道自己在做什么,则可以使用 virtualenv 或 pyenv。 @Padraic Cunningham,同意使用virtualenvs 而不是触摸system 的python 是最好的方法。然而,出于方便,许多人仍然使用sudo pip install。我不会认为将 python 安装到系统中是可怕的。毕竟,可能我们都在引入 virtualenvs 之前就这样做了。 当我想针对不同版本的 python 运行我的代码或测试新功能时,我使用 pyenv,我将系统 python 用于其他所有事情,因为我对一切工作原理有很好的理解,但理解多年来,我的操作系统很艰难,涉及到几次破坏我的操作系统,当你知道如何使用系统 python 时,但是有很多关于 SO 的帖子,比如为什么 apt-get 不再工作了......来自安装了多个python 版本,然后更改其默认值以尝试纠正 ImportError: No module named

以上是关于成功安装 pip 后的 ImportError [重复]的主要内容,如果未能解决你的问题,请参考以下文章

为啥我在安装 pip 后立即收到 ImportError: No module named pip '?

ImportError:尝试安装软件包时没有名为 pip 的模块

cython 嵌入后的 ImportError

Dask 的默认 pip 安装给出“ImportError: No module named toolz”

pySerial 已安装,但仍然收到 ImportError

执行pip安装时的ImportError