今天我决定手动安装 python 和 scipy 堆栈,而不是像以前那样使用 Anaconda(或 Canopy)。我在我的 mac 上使用 Homebrew 软件,并通过 Homebrew 软件安装了 python2 和 python3(2.7 和 3.6)。但是通读文档,有多种安装 scipy 堆栈的方法,我想知道它们有什么区别。我对它们进行了独立测试,它们都能正常工作。
来自Homebrew documentation :
python2 -m pip install numpy scipy matplotlib
python3 -m pip install numpy scipy matplotlib
这两个命令与 Matplotlib installation docuentation 相同列出如何通过 Homebrew 软件安装 matplotlib。为什么这里分别使用pip(系统Python 2.7.x的pip)而不是pip2和pip3呢?是因为你先调用了python2/python3吗?
然而,SciPy documentation使用 homebrew 时安装这些模块是不同的:
brew tap homebrew/science && brew install numpy scipy matplotlib
(注意 matplotlib 公式位于 homebrew/science 存储库中,这就是您需要使用 brew tap
的原因。)
最后,通过 Homebrew 软件安装 python2 和 python3 时从命令行读出:
pip2 安装 numpy scipy matplotlib
pip3 安装 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
所以在四种文档来源之间,有三种不同的方法可以在使用 Homebrew 软件时安装 scipy,它们都可以工作;但是每一个有何不同,应该优先选择一个吗?
据我所知,第一个和第三个方法都调用 pip (pip2/pip3),它们在功能上是等效的——都调用 Homebrew 的 Python X.X.X 的 pip——但一个是隐式的,另一个是显式的。我认为这意味着这两种方法都以轮子的形式从 pip 安装预构建的二进制包。对于第二种方法,我认为它会为这些包安装 Homebrew 软件自己的公式(即由 Homebrew 软件在其存储库中单独维护)。
如果这是真的,那么我认为如果您使用的是 Homebrew 软件维护的 python 版本(即通过 brew install python
或 python3
)。我的理由是,如果您稍后决定通过 homebrew 安装另一个具有任何 scipy 堆栈作为依赖项的公式,如果您之前使用 pip 安装它们,它将再次从 homebrew 的存储库安装这些模块。
如前所述,我不确定我的理解是否正确,而且我还没有找到任何答案,所以任何见解或确认将不胜感激。
最佳答案
您的分析似乎是正确的:变体 1 和 3 将从 python 包索引 (PyPI) 安装 numpy/scipy 并将使用预构建的轮子(如果适用于您的平台,它们很可能是)。 变体 2 安装 brew formula。
正如@Evhz 所提到的,用于 numpy 和 scipy 的 conda 包使用 Intel Math Kernel 库,与从 PyPI 或 brew 安装的包相比,它可以提供显着的加速(不仅仅是在 Intel 处理器上),both的 which链接到 OpenBLAS .
关于首选哪种方法:这并不完全简单。
- 是的,从表面上看,使用
brew
来管理 python 解释器和 python 包似乎是一致的。 - 但是,homebrew 只提供了少量 python 包的公式,因此无论如何您最终都需要与
pip
混合使用。 - 如果你想要性能,你可以使用
conda
,它将管理解释器和 python 包。 - 然而,也anaconda/conda-forge PyPI 仍有一些改进,因此您可能需要再次混合使用
pip
。
归根结底,没有完美的解决方案,但只要您有意识地选择一个解决方案,就不太可能遇到问题。
关于python - 通过 Homebrew 软件在 macOS 上安装 numpy、scipy 和 matplotlib 的不同方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46939140/