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

我已经成功地用 Numpy 和 Matplotlib 安装了 python3.9.1,在苹果公司的新 Mac mini 上。但是,我不能安装 SciPy: 我在使用时出现编译错误

python3 -m pip install scipy

我也尝试安装所有的东西,从酿酒,和 import scipy的工作,但使用它给一个赛格错误。我已经安装了 ARM 版本的 Lapack 和 openblas,但这并不能解决问题。

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

53272 次浏览

你可以从 < a href = “ https://github.com/conda-forge/miniforge3”rel = “ norefrer”> https://github.com/conda-forge/miniforge#miniforge3安装 miniforge3 然后安装这些软件包,

conda install numpy scipy matplotlib

可以在常规的 arm64酿造巨蟒上安装,您需要自己编译它。

如果 numpy已经安装好了(从轮子上) ,你需要卸载它:

pip3 uninstall -y numpy pythran

我必须编译 numpy,它需要 cythonpybind11:

pip3 install cython pybind11

然后编译 numpy:

pip3 install --no-binary :all: --no-use-pep517 numpy

Scipy 需要 pythran(安装 numpy 后应该会出现这种情况) :

pip3 install pythran

然后我们需要编译 scypy 本身,它依赖于 fortran 和 BLAS/LACK:

brew install openblas gfortran

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

export OPENBLAS=/opt/homebrew/opt/openblas/lib/

最后编译 scipy:

pip3 install --no-binary :all: --no-use-pep517 scipy

对我来说,最简单的解决办法是:

brew install scipy

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

我设法在苹果硅片上安装了 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}"

对于那些需要它的短期目的和不想要太多的忙碌-它似乎与 python3.6.4和 scipy1.5.4开箱即用(Big Sur 11.5.2,M1芯片)。

在浪费了几个小时之后,这个为我工作:

pip install --pre -i https://pypi.anaconda.org/scipy-wheels-nightly/simple scipy

此外,如果有人有此错误消息 >

########### CLIB COMPILER OPTIMIZATION ###########
Platform      :
Architecture: aarch64
Compiler    : clang


CPU baseline  :
Requested   : 'min'
Enabled     : none
Flags       : none
Extra checks: none


CPU dispatch  :
Requested   : 'max -xop -fma4'
Enabled     : none
Generated   : none
CCompilerOpt.cache_flush[809] : write cache to path

我在编译 numpy 和 scipy 之前找到了这个解决方案

原因分析: 从上面的错误消息中,您可以看到最后一个错误显示 clang 有一个错误,因此推测它应该是编译器引起的错误,因为新版本的 xcode 命令工具默认使用了编译方法的 arm 版本,如果我们想使用 For x86架构,我们需要通过环境变量手动设置特定的架构。

export ARCHFLAGS="-arch x86_64"

例如:

3c790c45799ec8c598753ebb22/build/temp.macosx-10.14.6-arm64-3.8/ccompiler_opt_cache_clib.py
----------------------------------------
ERROR: Command errored out with exit status 1: /Users/daniel_edu/Projects/PERSONAL/great_expectation_demo/.env/bin/python3 -u -c 'import io, os, sys, setuptools, tokenize; sys.argv[0] = '"'"'/private/var/folders/zb/c_b9kh2x1px7vl5683rwz8fr0000gn/T/pip-install-y8alaej_/numpy_3d813a3c790c45799ec8c598753ebb22/setup.py'"'"'; __file__='"'"'/private/var/folders/zb/c_b9kh2x1px7vl5683rwz8fr0000gn/T/pip-install-y8alaej_/numpy_3d813a3c790c45799ec8c598753ebb22/setup.py'"'"';f = getattr(tokenize, '"'"'open'"'"', open)(__file__) if os.path.exists(__file__) else io.StringIO('"'"'from setuptools import setup; setup()'"'"');code = f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record /private/var/folders/zb/c_b9kh2x1px7vl5683rwz8fr0000gn/T/pip-record-q9vraevr/install-record.txt --single-version-externally-managed --compile --install-headers /Users/daniel_edu/Projects/PERSONAL/great_expectation_demo/.env/include/site/python3.8/numpy Check the logs for full command output.
(.env) ➜  great_expectation_demo git:(master) ✗ export ARCHFLAGS="-arch x86_64"
(.env) ➜  great_expectation_demo git:(master) ✗ pip install --no-binary :all: --no-use-pep517 numpy
Collecting numpy
Using cached numpy-1.21.5.zip (10.7 MB)
Preparing metadata (setup.py) ... done
Skipping wheel build for numpy, due to binaries being disabled for it.
Installing collected packages: numpy
Running setup.py install for numpy ... done
Successfully installed numpy-1.21.5


你想安装的是哪个版本?

对于在 Macbook air M1上运行的我来说,我需要将版本从 scypy = = 1.5.1增加到 scypy = = 1.7.3,所以我想你应该使用1.7.3或更高版本,一切都会好起来的..。

 pip install -Iv scipy==1.7.3

或者直接在你的文件中添加这一行:

scipy==1.7.3

我使用 conda install scipy来解决这个问题。Conda 为 Apple M1提供了一个自定义版本的 scypy。如果您不想使用 Conda,请将 macOS 更新为12。

下面这些对我很有用。

我目前正在使用 Python 3.10.8,安装使用 brew

目前,在安装 numpy==1.23.4时,需要使用 setuptools < 60.0.0

我使用 (brew --prefix)/bin/python3 -m pipbrew安装的 python 3.10显式调用 pip

以下是我刚刚安装的版本。

# python         3.10.8


# pip            22.3
# setuptools     59.8.0
# wheel          0.37.1


# numpy          1.23.4
# scipy          1.9.3
# pandas         1.5.1
# scikit-learn   1.1.3
# seaborn        0.12.1
# statsmodels    0.13.2


# gcc            12.2.0
# openblas       0.3.21
# gfortran       12
# pybind11       2.10.0
# Cython         0.29.32
# pythran        0.12.0

以下是我遵循的步骤:

# setuptools < 60.0.0 is required for numpy==1.23.4 in Python 3.10.8
$(brew --prefix)/bin/python3 -m pip install --upgrade pip==22.3 setuptools==59.8.0 wheel==0.37.1


# uninstall numpy and pythran first
$(brew --prefix)/bin/python3 -m pip uninstall -y numpy pythran


# uninstall scipy
$(brew --prefix)/bin/python3 -m pip uninstall -y scipy


# install prerequisites (with brew)
brew install gcc
brew install openblas
brew install gfortran


# set environment variables for compilers to find openblas
export LDFLAGS="-L/opt/homebrew/opt/openblas/lib"
export CPPFLAGS="-I/opt/homebrew/opt/openblas/include"


# install the prerequisites (with pip)
$(brew --prefix)/bin/python3 -m pip install pybind11
$(brew --prefix)/bin/python3 -m pip install Cython


# install numpy
$(brew --prefix)/bin/python3 -m pip install --no-binary :all: numpy


# install pythran after installing numpy, before installing scipy
$(brew --prefix)/bin/python3 -m pip install pythran


# install scipy
export OPENBLAS="$(brew --prefix)/opt/openblas/lib/"
$(brew --prefix)/bin/python3 -m pip install scipy


# install pandas
$(brew --prefix)/bin/python3 -m pip install pandas


# install scikit-learn
$(brew --prefix)/bin/python3 -m pip install scikit-learn


# install seaborn
$(brew --prefix)/bin/python3 -m pip install seaborn


# install statsmodels
$(brew --prefix)/bin/python3 -m pip install statsmodels

根据 这个 Github 问题,Scipy 不能在 MacOS11(大苏尔)上工作。如果这些解决方案都不适合你,我建议你更新操作系统。