如何使用pip和homebrew安装SciPy堆栈?

6
我试图在virtualenv中安装基本的scipy堆栈(numpy, scipy, matplotlib, pandas, sympy, ipython, nose);目前,我正在使用OSX Mountain Lion。从这些软件包的安装页面以及此处和网络上的各种线程,似乎pandas、sympy和nose可以仅通过pip轻松安装(尽管有些将numpy/scipy等列为依赖项)。
然而,对于正确安装numpy、scipy、matplotlib和ipython*,存在相互冲突且有点复杂的说明。仅使用pip安装似乎不是安装这些软件包的正确方法;看起来需要使用homebrew安装一些依赖项,但是各个地方列出了不同的软件包要在pip安装numpy/scipy等之前进行brew安装。是否有全面且最新的软件包依赖性列表需要在pip安装numpy、scipy和matplotlib之前使用homebrew进行安装?
只是作为一个注释,我已经查看了tapping homebrew/python,以便使用homebrew正确安装numpy、scipy和matplotlib,但我想安装到virtualenv中,我认为我不能使用homebrew来做到这一点。
非常感谢任何帮助;提前致谢!

*另外,对于ipython,安装页面上说pip install ipython[all]就足够了,但是一些其他来源(http://www.coderstart.com/setup/python-setup.html; http://www.lowindata.com/2013/installing-scientific-python-on-mac-os-x/)似乎表明需要先安装qt、pyqt和zmq包,然后再使用pip安装ipython;homebrew安装是否必要,还是只按照ipython安装页的说明直接pip安装就可以呢?

2个回答

10

回答自己的问题,希望这有所帮助;如果有任何错误,请随时纠正。原始版本是一堵巨大的文字墙,因此我在顶部添加了一个“tl;dr”,仅列出步骤,以便更清楚地了解整个过程。

tl;dr: 在终端/ bash中进入虚拟环境(如果您想安装到其中)并按顺序输入这些命令。这在OSX Mountain Lion上经过测试。

pip install numpy
brew install gcc
pip install scipy
brew install freetype
pip install matplotlib
pip install nose
pip install pandas
pip install sympy
pip install ipython[all]
brew install pyqt
brew install qt
brew install sip
echo "export PYTHONPATH=/usr/local/lib/python2.7/site-packages:$PYTHONPATH" >> ~/.bash_profile
source ~/.bash_profile
*注:如果使用brew安装pyqt,可能已经安装了qt和sip;如果是这样的话,在安装pyqt之后就不需要再安装qt和sip了。对于倒数第二行,将该行直接复制粘贴到~/.bash_profile中可能更加可靠,因为它可能需要放在~/.bash_profile内容的顶部。另外,brew install pandoc是可选的,但是对于ipython笔记本的nbconvert命令正常工作是必要的。

编辑10/13/14[见底部的编辑]:在~/.bash_profile中编辑PYTHONPATH会强制虚拟环境继承全局包;如果您希望能够创建隔离的环境,请勿执行最后两个步骤。相反,假设已安装virtualenvwrapper,请编辑包含scipy内容的virtualenv下bin目录中的local postactivate和predeactivate脚本。

在postactivate中输入:

export PYTHONPATH=/usr/local/lib/python2.7/site-packages:$PYTHONPATH 

在 predeactivate 中输入:

unset PYTHONPATH

当激活包含scipy内容的虚拟环境时,应该编辑PYTHONPATH以使ipython qtconsole可用,但在虚拟环境停用后,应重置PYTHONPATH以避免对其他虚拟环境的影响。

安装 ipython 很简单,但配置起来有点复杂。ipython 可以与 qt 控制台和称为 ipython notebook 的东西一起使用,它们具有各种优点。您可以选择只使用 pip install ipython 安装 ipython,并根据需要稍后安装可选依赖项,但我使用 pip install ipython[all] 安装了所有主要的可选依赖项。这将安装 ipython 以及许多其他软件包的依赖项(使用 backports.ssl-match-hostname(来自 tornado),certifi(来自 tornado),docutils(来自 sphinx),gnureadline,ipython,jinja2,markupsafe(来自 jinja2),numpydoc(from ipython[all]),pygments,pyzmq,sphinx,tornado)。这应该是 ipython 使用标准 ipython shell、qt 控制台和 ipython notebook 的良好基础。但是,如果要使用 qt 控制台或笔记本电脑,则尚未完全设置。

要使用 qt 控制台,必须 brew install pyqt、qt 和 sip 软件包,因为这些是无法使用 pip 安装的依赖项;从经验上看,brew install pyqt 似乎安装了所有三个软件包,但单独安装这三个软件包可能更安全。完成此操作后,进入 ~/.bash_profile 并添加“export PYTHONPATH=/usr/local/lib/python2.7/site-packages:$PYTHONPATH”行;然后在终端中键入“source ~/.bash_profile”以重新加载 shell。这应该成功启动 qt 控制台。(我不完全确定为什么需要添加此行,因为我已经编辑了 PATH 变量以将 /usr/local/bin 放在 /usr/bin 之前,但也许 qt/pyqt/sip 仍然在尝试将自己链接到系统默认 python 而不是 homebrew 安装的 python。)

笔记本电脑似乎可以直接使用,至少我所见过的都可以正常工作,但有一件事情需要注意:为了使用 nbconvert(将笔记本转换为不同的文件格式),必须安装 pandoc 软件包,大概是通过 homebrew 安装的。与 qt/pyqt/sip 一样,它无法使用 pip 安装,这就是为什么它没有随 pip install ipython[all] 一起安装的原因。

编辑 10/13/14:所以显然,编辑 PYTHONPATH 将使空虚拟环境失效,从而使全局软件包也可以在虚拟环境中使用 (how to isolate virtualenv from local dist-packages?)。这在很大程度上破坏了虚拟环境的目的,假设您想要一个新鲜的环境,但是对于 ipython qtconsole 的正确工作是必要的。

修复方法是编辑(假设已安装virtualenvwrapper)虚拟环境的bin文件中的本地postactivate和predeactivate脚本。在postactivate中输入一行“export PYTHONPATH=/usr/local/lib/python2.7/site-packages:$PYTHONPATH;” 在predeactivate中输入一行“reset PYTHONPATH”。不要执行原始序列的最后两个步骤,或删除添加到~/bash_profile的行。这样可以使对PYTHONPATH的更改仅在激活了安装软件包的虚拟环境时进行,以便qtconsole起作用,但在虚拟环境停用之前重置,以便不影响其他环境。

回答自己的问题是可以的,但这篇冗长的叙述有点难以理解。考虑到这个过程本质上是一系列的 shell 命令,将你执行的命令准确地报告为代码格式的行会非常有用。我怀疑... - Deditos
【勘误】我怀疑有些用户会打错字,这会让他们难以核对您的答案。 - Deditos
@Deditos 嗯,是的,谢谢你指出来!我想我有点太兴奋了,被描述带走了。我感觉有点不好意思删除所有那些叙述,但我会编辑 tl;dr 使其更清晰/包含代码格式化行并将其移到顶部。 - thereislight

1

这些指令似乎是关于在新的Mac上安装Python、pip等,但并不是关于正确设置科学Python虚拟环境的;无论如何还是谢谢! - thereislight

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接