在 OSX 上使用 pip 安装模块,但在导入时找不到

Posted

技术标签:

【中文标题】在 OSX 上使用 pip 安装模块,但在导入时找不到【英文标题】:Modules are installed using pip on OSX but not found when importing 【发布时间】:2016-09-17 10:03:59 【问题描述】:

我使用 pip 成功安装了不同的模块,它们显示在

pip list

如:

beautifulsoup4 (4.4.1)
requests (2.10.0)
Scrapy (1.1.0)

从终端

但是,每当我尝试导入它时

import beautifulsoup4 / import bs4import Scrapyimport requests

显示以下错误:

$ python
Python 2.7.5 (default, Mar  9 2014, 22:15:05) 
[GCC 4.2.1 Compatible Apple LLVM 5.0 (clang-500.0.68)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import requests
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named requests

更新:如果我在正确的站点包目录中启动 python

$ pwd
/usr/local/lib/python2.7/site-packages
$ python
Python 2.7.5 (default, Mar  9 2014, 22:15:05)
>>> import requests
>>> import bs4
>>> import scrapy

然后就可以了。如果直接在终端上写入,这将解决问题。但是,我不知道如何使它在 file.py 中工作,这将是正常使用。

据我所知,我只安装了 Python2.7。

来自文件.py

如果我有一个 file.py 保存在某个本地文件夹中。例如,这包含

import requests
from bs4 import BeautifulSoup

当我尝试时

python file.py

我得到同样的错误。

方法

列表中的任何其他模块也是如此。 我认为 pip 将它们安装在 Python 未读取的目录中,但根据我的阅读,它是正确的。

它们都安装在这里:

/usr/local/lib/python2.7/site-packages

Padraic Cunningham 要求的输出:

$ which -a pip
/usr/local/bin/pip
$ which -a python
/usr/bin/python
/usr/local/bin/python

leovp 请求的输出:

$ pip -V
pip 8.1.2 from /usr/local/lib/python2.7/site-packages (python 2.7)

已检查线程

我已经检查了以下线程,但不幸的是它们并没有帮助我解决问题:

installing pyside using PIP - nmake not found PIp installs but module is not found ==> 可能提供了正确的答案,但给出的链接不再有效 google.protobuf installed, but module not found Python pip install module is not found. How to link python to pip location?

你有什么想法吗?

【问题讨论】:

你肯定没有使用pip安装的解释器,添加which -a pipwhich -a python的输出 pip -V 显示什么?您是否有可能同时安装了 Python 2 和 Python 3? 好的,现在用/usr/local/bin/python 启动一个shell 并尝试导入。 @PadraicCunningham,这行得通。我应该以某种方式在我的 python.py 文件中添加它吗? 最简单的解决方案是下载 get-pip.py 并使用 /usr/bin/python get-pip.py bootstrap.pypa.io/get-pip.py 安装它 【参考方案1】:

这是有效的答案,这基本上是问题的 cmets 中已解释的内容。但是,我认为将其解释为清晰且结构合理的答案会很有用。

正如强调的那样,问题是我没有使用 pip 正在为其安装的解释器。 命令which 显示了 pip 安装模块的位置:

$ which -a pip
/usr/local/bin/pip

以及不同python版本的位置:

$ which -a python
/usr/bin/python
/usr/local/bin/python

也就是说,我的系统/默认python是

/usr/bin/python

当 pip 安装时

/usr/local/bin/python

因此,当我刚刚输入 python 时,我无法导入我安装的任何东西,因为 /usr/bin/python 解释器是启动的。

解决方案

再次安装 pip,指定要安装的模块的目的地。这必须是系统/默认 python 的目的地。

这分两步完成:

    从bootstrap.pypa.io/get-pip.py 下载get-pip.py。 (您可能需要使用已弃用的 Python 2:bootstrap.pypa.io/2.7/get-pip.py)

    使用以下命令安装它

    sudo /usr/bin/python get-pip.py

请注意,如果没有sudo,我会遇到错误并且无法安装 pip。

【讨论】:

嗨,我也遇到了类似的问题。在我的例子中,在 Mac OS High Sierra 中,which -a pip 产生 /usr/local/bin/pipwhich -a python 产生 /usr/bin/python。我尝试了相同的程序,但我失败了。我将 get-pip.py 下载到我的桌​​面并运行 sudo /usr/bin/python ~/Desktop/get-pip.py。程序运行良好,但是当我运行which -a pip 时,我仍然只得到/usr/local/bin/pip 我遇到了同样的问题。就我而言,它在安装前后也位于/usr/local/bin/pip。所以你可以说什么都没有改变,但事实上,有些东西改变了,因为现在它正在工作。我不需要sudo。我正在运行 Mojave。【参考方案2】:

我刚刚解决了一个类似的问题。

为了提供一些背景知识,我通过执行brew install python 来安装piphomebrew。执行此命令的一个缺点是,它会同时安装 python2 和 python3(在某些情况下可能不是缺点),然后

pip install scrapy

但是当我尝试import scrapy时,它抱怨ImportError: No module named scrapy


我的解决方案: 运行brew doctor,它应该会报告你一个链接坏了,它要求你运行brew link python,你可能会遇到一些错误,但是按照提示的建议继续前进,在成功执行brew link python之后,一切都应该工作了。

【讨论】:

【参考方案3】:

由于您的问题可能是由于各种原因引起的,我在这里列出了其中的一些:

这可能是因为这里曾经说过:Pip installs but module is not found。已使用更新的链接更新了答案。

您要查找的链接:https://pythonhosted.org/setuptools/setuptools.html#development-mode

如果您安装了两个版本的 python,也可能会发生这种情况。如果您访问的 pip 是一个版本,而使用的 python 解释器是另一个版本。

所以请确保您使用的是相同版本的 python 来安装和使用该包。

您可以使用别名来解决此问题,

首先,设置一个shell别名:

alias python=/usr/local/bin/python3

然后,在提示符下键入它,或将其放入您的 ~/.bashrc 以便无论何时从终端打开 python,都会打开正确的版本。

如果上述两种方法都不适合您,请检查:

ImportError No module named 或 this

【讨论】:

你是对的 Ani Menon,安装了两个版本的 python。我在回答中解释了我是如何着手解决问题的。 很好,您也可以使用别名来修复它。如果您的两个 python 版本都分配了不同的别名,则可以根据需要轻松使用两者。 (我不知道为什么有人对答案投了反对票!) 有趣,您能详细介绍一下别名吗? 使用alias命令;答案已编辑。同样,您也可以给pip 起别名。 做一个brew reinstall python2。它可能会抱怨它无法删除某些文件。如果是这种情况,请确保您的/usr/local/lib/python2.7/site-packages 中的所有文件都归您所有(即cd /usr/local/lib/python2.7/site-packages ; sudo chown -R &lt;YOURLOGIN&gt; *)。然后重试brew reinstall python2pip install --upgrade pip setuptools,最后使用pip安装你的库。 pip install X.【参考方案4】:

我添加这个以防它帮助其他人。对我来说,问题是我正在运行 Anaconda 并且 pip3 正在安装到与 Anaconda 链接不同的目录。要解决此问题,请运行 conda deactivate。您可以稍后使用conda activate 重新激活

【讨论】:

对我来说,它通常只是 pip,它会安装但无法导入。需要使用pip3 install &lt;module name&gt; 而不是pip install &lt;module name&gt;,然后它才可用于Python 3。这在Mac 上只有Python 2 可用或同时安装了Python 2 和Python 3。【参考方案5】:

我可以通过运行来解决这个问题:

$ brew doctor 

得到以下结果:

考虑设置您的 PATH,使 /usr/local/bin 出现在 /usr/bin 之前。

这是一个单行:

echo 'export PATH="/usr/local/bin:$PATH"' >> ~/.bash_profile

运行单行程序后,我可以从/usr/local/bin 访问已安装的包

【讨论】:

【参考方案6】:

在终端运行brew doctor 它应该给你一个警告,上面写着:

Warning: The following directories do not exist:
/usr/local/sbin

You should create these directories and change their ownership to your account.
  sudo mkdir -p /usr/local/sbin
  sudo chown -R $(whoami) /usr/local/sbin

在终端中输入sudo mkdir -p /usr/local/sbin 并回车 然后输入sudo chown -R $(whoami) /usr/local/sbin 然后运行 ​​python 并尝试再次导入您的模块。

【讨论】:

以上是关于在 OSX 上使用 pip 安装模块,但在导入时找不到的主要内容,如果未能解决你的问题,请参考以下文章

pyqt 与 Anaconda 一起安装时找不到 PyQt5.QtWidgets 模块

使用本地 JSON 文件导入时找不到模块

在 osx 10.8 上安装 mysql-python 时找不到“my_config.h”文件

DLL 加载失败:执行“从 mpi4py 导入 MPI”时找不到指定的模块

从 PyQt4 导入 QtGui 时找不到图像错误

在 Lion 上安装 MySQLdb 时遇到困难 - 导入找不到模块