成功安装 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。我并不完全同意这里的重复关闭,只是因为欺骗目标的问题是一个可怕的混乱,充满了 UPDATE 和 EDIT 部分。今晚我看看能不能收拾一下。 如果我可以,那么我认为合并这些问题可能是有意义的,这样 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 的模块
Dask 的默认 pip 安装给出“ImportError: No module named toolz”