在 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 bs4
或 import Scrapy
或 import 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 pip
和which -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/pip
和 which -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
来安装pip
和homebrew
。执行此命令的一个缺点是,它会同时安装 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 <YOURLOGIN> *
)。然后重试brew reinstall python2
和pip install --upgrade pip setuptools
,最后使用pip安装你的库。 pip install X
.【参考方案4】:
我添加这个以防它帮助其他人。对我来说,问题是我正在运行 Anaconda 并且 pip3 正在安装到与 Anaconda 链接不同的目录。要解决此问题,请运行 conda deactivate
。您可以稍后使用conda activate
重新激活
【讨论】:
对我来说,它通常只是 pip,它会安装但无法导入。需要使用pip3 install <module name>
而不是pip install <module name>
,然后它才可用于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 模块
在 osx 10.8 上安装 mysql-python 时找不到“my_config.h”文件