Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 成功安装pip后的导入错误_Python_Pip - Fatal编程技术网

Python 成功安装pip后的导入错误

Python 成功安装pip后的导入错误,python,pip,Python,Pip,我已使用pip install成功安装了一个库。但当我尝试导入它时,python会引发ImportError:没有名为的模块。为什么会出现此错误以及如何使用已安装的库?TL;DR:通常存在多个版本的python解释器和pip版本。使用python-mpinstall而不是pip install将确保库安装到默认的python解释器中 另请注意:根据我的个人经验,我建议不要使用sudo-pip-install将软件包安装到系统的默认python解释器中。这可能会导致各种混乱的问题。 每当你想用su

我已使用
pip install
成功安装了一个库。但当我尝试导入它时,python会引发
ImportError:没有名为
的模块。为什么会出现此错误以及如何使用已安装的库?

TL;DR:通常存在多个版本的python解释器和pip版本。使用
python-mpinstall
而不是
pip install
将确保库安装到默认的python解释器中

另请注意:根据我的个人经验,我建议不要使用
sudo-pip-install
将软件包安装到系统的默认python解释器中。这可能会导致各种混乱的问题。 每当你想用
sudo
调用
pip
时,请先检查a是否对你来说是更好的选择


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

在unix系统上,可以使用shell来了解到底发生了什么

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

/private/tmp/py32/bin/python
/usr/local/bin/python
/usr/bin/python
每个pip版本只属于一个解释器<代码>哪个-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-mpipinstall
而不是
pip install
。这将调用属于默认python解释器的pip版本。

还有几点:

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

  • 什么现代系统具有相同python的多个版本?当您看到
    /usr/local/bin/python
    时,通常意味着您安装了它。我想指出的是,不仅仅是
    python
    ,还有多个python解释器。默认情况下,通常使用python2.x和python3.x解释器。嗯,也许我必须重写以使我的观点更清楚。是的,但在unix上有默认的系统python解释器,而不是默认安装的多个版本的python 2或3解释器,如果您看到其他解释器,那么您就安装了它们,
    which-python
    在新安装时应该返回一个路径,并且应该非常清楚,您不应该使用默认的python。如果你不知道自己在做什么,那么使用virtualenv或pyenv是最好的选择。@Padraic Cunningham,同意使用
    virtualenvs
    而不是触摸
    system
    的python是最好的选择。然而,出于方便起见,许多人仍然使用
    sudopip安装。我不认为安装系统Python是可怕的。毕竟,可能在引入virtualenvs之前我们都这么做了。当我想在不同版本的python上运行代码或测试新功能时,我会使用pyenv,我在其他方面都使用系统python,因为我对所有东西的工作原理都有很好的理解,但这种理解是非常困难的,多年来我的操作系统被破坏了好几次,当你知道如何工作时使用系统python很好,但是有很多帖子,比如为什么apt不再工作。。这些人安装了多个版本的python,然后更改了默认值以纠正错误:没有名为@BhargavRao Yikes的模块。我不完全同意这里的复制闭包,只是因为复制目标的问题是一个充满更新和编辑部分的可怕的混乱。今晚我看看能不能把它整理一下。如果可以的话,那么我认为合并这些问题可能是有意义的,这样cel的(好的)答案就可以向其他问题的更多受众公开。@AndrasDeak,谢谢,这似乎是这个特定问题更全面的目标,因为答案也指向相同的解决方案。我现在正在考虑一种不同的方法,把这个问题骗到你的目标上,别管另一个问题。@AndrasDeak这是一种合法的批评,如果能够以某种方式将这个问题或之前的欺骗目标的答案精确到4个,每一个都能简洁地涵盖其中一个案例,那就太好了。@Mark,酷,我会把副本改成那样,但我仍然不确定这里是否需要合并。(合并是一个小痛,因为它几乎是不可逆转的)。OP似乎也很活跃。我认为最好再等几个用户确认一次。@BhargavRao,以及对话中的所有内容:我通常可以通过合并重复项来改进。我认为问题/答案对以某种形式以一种易于搜索的方式提供是很重要的。我相信你对如何合并/改进这个问题的判断。