如何在 Apple Silicon (ARM / M1) 上安装 SciPy

Dav*_*hal 19 python arm scipy apple-silicon apple-m1

我已经在带有 Apple Silicon 的新 Mac mini 上成功安装了带有 Numpy 和 Matplotlib 的 python 3.9.1。但是,我无法安装 SciPy:使用时出现编译错误

python3 -m pip install scipy

我还尝试从 brew 安装所有内容,并且“import scipy”有效,但使用它会导致段错误。我已经安装了 lapack 和 openblas 的 ARM 版本,但这并不能解决问题。

有人成功了吗?(我有兴趣在本地运行它,而不是通过 Rosetta)。

小智 65

在浪费了几个小时之后,这个对我有用:

pip install --pre -i https://pypi.anaconda.org/scipy-wheels-nightly/simple scipy
Run Code Online (Sandbox Code Playgroud)

  • 最佳答案,操作简单! (4认同)
  • 这种夜间构建方法也适用于我的 Apple M1 上的 scikit-learn,但我需要将 `--extra-index` 添加到命令中:`pip install --pre --extra-index https://pypi.anaconda。 org/scipy-wheels-nightly/simple scikit-learn`. 来源:https://scikit-learn.org/stable/developers/advanced_installation.html (4认同)
  • 这个命令在很长一段时间内对我来说都很有效,但现在我收到错误:`查找索引:https://pypi.anaconda.org/scipy-wheels-nightly/simple 错误:找不到满足 scipy 要求的版本(来自版本:无)错误:找不到 scipy` 的匹配发行版 (3认同)
  • 确实是的。经过无数个小时。这适用于配备 BigSur 版本 11.6 (20G165) 的 MacBook Air(M1,2020)。如果我理解正确的话,这基本上是来自提供最稳定版本 SciPy 的 anaconda 服务器吗?不确定它是如何与 Appl Silicon 完美配合的?非常感谢您的回答。 (2认同)

The*_*ijn 25

可以安装在普通的arm64 brew python 上,需要自己编译。

首先我必须编译numpy,这需要cythonpybind11

pip3 install cython pybind11
Run Code Online (Sandbox Code Playgroud)

然后numpy可以编译:

pip3 install --no-binary :all: --no-use-pep517 numpy
Run Code Online (Sandbox Code Playgroud)

然后我们需要自己编译scipy,它依赖于fortran和BLAS/LACK:

brew install openblas gfortran
Run Code Online (Sandbox Code Playgroud)

告诉scipy它在哪里可以找到这个库:

export OPENBLAS=/opt/homebrew/opt/openblas/lib/
Run Code Online (Sandbox Code Playgroud)

然后最后编译scipy

pip3 install --no-binary :all: --no-use-pep517 scipy
Run Code Online (Sandbox Code Playgroud)

  • 不幸的是,“SciPy”编译失败,并显示“错误:命令”ar rcs build/temp.macosx-10.14.6-arm64-3.8/libsuperlu_src.a build/temp.macosx-10.14.6-arm64-3.8/scipy/sparse/ linalg/dsolve/SuperLU/SRC/dlaqgs.o [………]" 失败,退出状态为 1` :( (6认同)
  • 这个答案对我在 OSX `11.2.3 (20D91)` 和 MacBook Pro(13 英寸,M1,2020)上有效。我没有像 @MattiSG 那样编译失败 (4认同)
  • 为什么我们应该使用 --no-use-pep517 强制遗留模式? (4认同)
  • 在 numpy 之前我必须 `brew install openblas gfortran`...numpy 至少需要 openblas (3认同)
  • 我需要 pip install pythran (2认同)

dwo*_*feu 11

此解决方案适用于我的 M1 机器pyenv

brew install openblas
OPENBLAS="$(brew --prefix openblas)" pip install numpy scipy
Run Code Online (Sandbox Code Playgroud)

  • 这对我有用。我还可以使用相同的方法安装 `scikit-learn`:`OPENBLAS="$(brew --prefix openblas)" pip install numpy scikit-learn` (2认同)

小智 8

对我来说最简单的解决方案:

brew install scipy
Run Code Online (Sandbox Code Playgroud)

编辑 PATH 可能是个好主意,因此自制版本将成为默认版本。

  • 请注意,如果你这样做,brew会在这个位置`/opt/homebrew/Cellar/python@3.9/3.9.6/bin/python3`安装python3.9,并且如果你运行这个python,你将只能导入scipy可执行文件 (3认同)
  • 不要使用brew 安装Python 包。使用 env 来隔离事物。这是灾难的根源。请参阅我的答案,了解如何为 SciPy 完成此操作。 (2认同)

isu*_*ruf 7

您可以从https://github.com/conda-forge/miniforge#miniforge3安装 miniforge ,然后安装这些软件包,

conda install numpy scipy matplotlib
Run Code Online (Sandbox Code Playgroud)

  • 您还可以使用brew安装miniforge:`brew install --cask miniforge` (4认同)

小智 6

我设法在 Apple Silicon 上安装了 scipy。我主要遵循 lutzroeder 的说明: https: //github.com/scipy/scipy/issues/13409

这些说明对我来说并不成功,但运行“pip3 install scipy”之后就可以了。我认为这解决了我的问题:

/opt/homebrew/bin/brew install openblas

export OPENBLAS=$(/opt/homebrew/bin/brew --prefix openblas)

export CFLAGS="-falign-functions=8 ${CFLAGS}"
Run Code Online (Sandbox Code Playgroud)