简体   繁体   中英

How to install SciPy on Apple Silicon (ARM / M1)

I have successfully installed python 3.9.1 with Numpy and Matplotlib on a new Mac mini with Apple Silicon. However, I cannot install SciPy: I get compilation errors when using

python3 -m pip install scipy

I also tried installing everything from brew, and import scipy works, but using it gives a seg fault. I have installed ARM versions of lapack and openblas, but this does not fix the problem.

Has anyone succeeded? (I am interested in running it natively, not through Rosetta).

This solution worked on my M1 machine with pyenv :

brew install openblas
OPENBLAS="$(brew --prefix openblas)" pip install numpy scipy

I have successfully installed python 3.9.1 with Numpy and Matplotlib on a new Mac mini with Apple Silicon. However, I cannot install SciPy: I get compilation errors when using

python3 -m pip install scipy

I also tried installing everything from brew, and "import scipy" works, but using it gives a seg fault. I have installed ARM versions of lapack and openblas, but this does not fix the problem.

Has anyone succeeded? (I am interested in running it natively, not through Rosetta).

I have successfully installed python 3.9.1 with Numpy and Matplotlib on a new Mac mini with Apple Silicon. However, I cannot install SciPy: I get compilation errors when using

python3 -m pip install scipy

I also tried installing everything from brew, and "import scipy" works, but using it gives a seg fault. I have installed ARM versions of lapack and openblas, but this does not fix the problem.

Has anyone succeeded? (I am interested in running it natively, not through Rosetta).

For those who need it for short-term purposes and don't want too much hustle - it seems to work with python 3.6.4 and scipy 1.5.4 out of the box (Big Sur 11.5.2, M1 chip).

The following worked for me.

I'm currently using Python 3.10.8 , installed using brew .

And currently, when installing numpy==1.23.4 , setuptools < 60.0.0 is required.

I'm using (brew --prefix)/bin/python3 -m pip for explicitly calling the pip from python 3.10 installed by brew .

Here are the versions I've just installed.

# 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

Here are the steps I followed:

# 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

What version of scipy you're trying to install?

To me running on Macbook air M1, I needed to increase the version from scipy==1.5.1 to scipy==1.7.3, so I guess you should use 1.7.3 version or above it and all will be fine...

 pip install -Iv scipy==1.7.3

Or just add in your file requirements.txt this line:

scipy==1.7.3

I have successfully installed python 3.9.1 with Numpy and Matplotlib on a new Mac mini with Apple Silicon. However, I cannot install SciPy: I get compilation errors when using

python3 -m pip install scipy

I also tried installing everything from brew, and "import scipy" works, but using it gives a seg fault. I have installed ARM versions of lapack and openblas, but this does not fix the problem.

Has anyone succeeded? (I am interested in running it natively, not through Rosetta).

I managed to get scipy installed on Apple Silicon. I mostly followed the instructions by lutzroeder here: https://github.com/scipy/scipy/issues/13409

Those instructions weren't successful for me, but running 'pip3 install scipy' worked afterwards. I think this fixed the problem for me:

/opt/homebrew/bin/brew install openblas

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

export CFLAGS="-falign-functions=8 ${CFLAGS}"

This one worked for me after wasting hours:

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

In addition, if someone has this error message>

########### 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 

I found this solution before compile numpy and scipy

Analysis of reasons: From the above error message, you can see that the last error shows that clang has an error, so it is speculated that it should be an error caused by the compiler, because the new version of the xcode command tool uses the arm version of the compilation method by default, and if we want to use For x86 architecture, we need to manually set the specific architecture through environment variables.

export ARCHFLAGS="-arch x86_64"

example:

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

I use conda install scipy to resolve this problem. Conda have a custom version of scipy for Apple M1. Update macOS to 12 if you don't want to use Conda.

According to this Github issue , Scipy doesn't work on MacOS 11 (Big Sur). If none of these solutions are working for you I'd suggest updating your OS.

SciPy maintainer here.

SciPy is now distributed for M1, on both conda and pip. You need at least macOS 12.0 (Monterey) and Python >= 3.8. Our support for macOS is good, meaning you should not need to do anything special or compile yourself unless you want to use a development version or older macOS versions.

If you need to compile, only use our guides (eg https://scipy.github.io/devdocs/dev/contributor/building.html#building-from-sources ). There are tons of moving pieces and doing something else might work today, but not tomorrow.

Avoid using pip to compile SciPy. Use our developer script python dev.py build after having followed the guides I linked to setup system dependencies for your platform.

Do NOT use brew to install a Python package, use an environment. brew is great to install system dependencies or other dev tools, but should not be used to install Python packages. Down the road this is a recipe for trouble.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM