通过自制软件在macOS上安装numpy、scipy和matplotlib的不同方式



今天我决定手动安装python和scipy堆栈,而不是像以前那样使用Anaconda(或Canopy)。我在mac上使用自制软件,并通过自制软件安装了python2和python3(2.7和3.6)。但是通过阅读文档,有多种方法可以安装scipy堆栈,我想知道其中的区别。我对它们进行了独立测试,它们都有效。

来自Homebrew文档:
python2 -m pip install numpy scipy matplotlib
python3 -m pip install numpy scipy matplotlib
这是Matplotlib安装文档列出的关于如何通过Homebrew安装Matplotlib的两个命令。为什么要分别使用pip(系统Python2.7.x的pip)而不是pip2和pip3?是因为你先叫蟒蛇2/蟒蛇3吗?

但是,使用自制软件时安装这些模块的SciPy文档有所不同:
brew tap homebrew/science && brew install numpy scipy matplotlib
(注意:matplotlib公式位于自制软件/科学存储库中,这就是您需要使用brew tap的原因。)

最后,通过自制程序安装python2和python3时,从命令行读取:
pip2 install numpy scipy matplotlib
pip3 install numpy scipy matplotlib
基于以下读取:

Pip and setuptools have been installed. To update them
pip2 install --upgrade pip setuptools
You can install Python packages with
pip2 install <package>
They will install into the site-package directory
/usr/local/lib/python2.7/site-packages
See: https://docs.brew.sh/Homebrew-and-Python.html
...
Pip, setuptools, and wheel have been installed. To update them
pip3 install --upgrade pip setuptools wheel
You can install Python packages with
pip3 install <package>
They will install into the site-package directory
/usr/local/lib/python3.6/site-packages
See: https://docs.brew.sh/Homebrew-and-Python.html

因此,在四种文档来源之间,使用自制软件时有三种不同的安装scipy的方法,它们都有效;但是每一种都有什么不同,应该优先选择哪一种呢?

据我所知,第一个和第三个方法都调用pip(pip2/pip3),在功能上是等效的——都调用Homebrew的Python X.X.X的pip——但一个是隐式的,另一个是显式的。我认为这意味着这两种方法都以轮子的形式从pip安装预构建的二进制包。对于第二种方法,我认为它为这些包安装了自制程序自己的公式(即由自制程序在其存储库中单独维护)。

如果这是真的,那么我认为如果您使用的是由自制程序维护的python版本(即通过brew install pythonpython3安装),则应该使用第二种方法。我的理由是,如果你后来决定通过依赖任何scipy堆栈的自制软件安装另一个公式,如果你以前使用pip安装这些模块,它会从自制软件的存储库中再次安装这些模块。

如前所述,我不确定我的理解是否正确,也无法找到任何答案,因此任何见解或确认都将不胜感激。

您的分析似乎是正确的:变体1和3将从python包索引(PyPI)安装numpy/scipy,并将使用预构建的轮子(如果您的平台可用,它们很可能是)。变体2安装酿造配方。

正如@Evhz所提到的,numpy和scipy的conda软件包使用英特尔数学内核库,与从PyPI或brew安装的软件包相比,它可以提供显著的加速(不仅仅是在英特尔处理器上),这两个软件包都与OpenBLAS链接。

关于更喜欢哪种方法:这并不完全简单。

  • 是的,从表面上看,使用brew来管理python解释器和python包似乎是一致的
  • 然而,自制软件只为少数python包提供公式,所以在任何情况下,您最终都需要与pip混合使用
  • 如果您想要性能,可以使用conda,它将同时管理解释器和python包
  • 然而,anaconda/conda-forge仍有一些与PyPI有关的问题,因此您可能需要再次使用pip

最终,没有完美的解决方案,但只要你在知情的情况下做出决定,你就不太可能遇到问题。

最新更新