Как установить SciPy на Apple Silicon (ARM / M1)

Я успешно установил python 3.9.1 с Numpy и Matplotlib на новый Mac mini с Apple Silicon. Однако я не могу установить SciPy: я получаю ошибки компиляции при использовании

python3 -m pip установить scipy

Я также попытался установить все из brew, и "import scipy" работает, но его использование дает ошибку seg. Я установил ARM-версии lapack и openblas, но это не решает проблему.

У кого-нибудь получилось? (Мне интересно запускать его изначально, а не через Rosetta).

13 ответов

Возможна установка на обычный питон arm64 brew, нужно его скомпилировать самостоятельно.

Сначала мне пришлось скомпилировать, что требует cython а также pybind11:

      pip3 install cython pybind11

потом numpy можно скомпилировать:

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

Затем нам нужно скомпилировать сам scipy, это зависит от fortran и BLAS / LACK:

      brew install openblas gfortran

Скажите, где можно найти эту библиотеку:

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

Затем, наконец, скомпилируйте scipy:

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

Этот сработал для меня после потраченных часов:

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

Это решение работало на моей машине M1 с pyenv:

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

Вы можете установить miniforge с https://github.com/conda-forge/miniforge#miniforge3, а затем установить эти пакеты с помощью,

      conda install numpy scipy matplotlib

Для меня самые простые решения:

      brew install scipy

Вероятно, хорошая идея отредактировать PATH, поэтому по умолчанию будет версия homebrew.

Мне удалось установить scipy на Apple Silicon. Я в основном следовал инструкциям lutzroeder здесь: https://github.com/scipy/scipy/issues/13409

Эти инструкции для меня не увенчались успехом, но после этого сработала команда pip3 install scipy. Я думаю, это устранило проблему для меня:

/ opt / homebrew / bin / brew установить openblas

экспорт OPENBLAS=$(/ opt / homebrew / bin / brew --prefix openblas)

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

Сопровождающий SciPy здесь.

SciPy теперь распространяется для M1 как на conda, так и на pip. Вам потребуется как минимум macOS 12.0 (Монтерей) и Python >= 3.8. Наша поддержка macOS хороша, а это означает, что вам не нужно делать ничего особенного или компилировать самостоятельно, если вы не хотите использовать версию для разработки или более старые версии macOS.

Если вам нужно скомпилировать, используйте только наши руководства (например, https://scipy.github.io/devdocs/dev/contributor/building.html#building-from-sources). Есть тонны движущихся частей, и делать что-то еще может сработать сегодня, но не завтра.

Избегайте использования pip для компиляции SciPy. Используйте наш скрипт разработчикаpython dev.py buildпосле того, как вы следовали руководствам, которые я связал, чтобы установить системные зависимости для вашей платформы.

НЕ используйте brew для установки пакета Python, используйте среду. brew отлично подходит для установки системных зависимостей или других инструментов разработки, но его не следует использовать для установки пакетов Python. В будущем это рецепт неприятностей.

Для тех, кому он нужен для краткосрочных целей и не хочет излишней суеты - похоже, он работает с python 3.6.4 и scipy 1.5.4 из коробки (Big Sur 11.5.2, чип M1).

Кроме того, если у кого-то есть это сообщение об ошибке>

      ########### 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 версия метода компиляции по умолчанию, и если мы хотим использовать для архитектуры 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

Следующее сработало для меня.

сейчас я используюPython 3.10.8, установлен с помощью .

И в настоящее время при установкеnumpy==1.23.4,setuptools < 60.0.0требуется.

я использую(brew --prefix)/bin/python3 -m pipдля явного вызоваpipотpython 3.10установленbrew.

Вот версии, которые я только что установил.

      # 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

Какую версию scipy вы пытаетесь установить?

Для меня, работающего на Macbook air M1, мне нужно было увеличить версию с scipy==1.5.1 до scipy==1.7.3, поэтому я думаю, вам следует использовать версию 1.7.3 или выше, и все будет хорошо...

       pip install -Iv scipy==1.7.3

Или просто добавьте в свой файл requirements.txt эту строчку:

      scipy==1.7.3

Согласно этому выпуску Github, Scipy не работает на MacOS 11 (Big Sur). Если ни одно из этих решений не работает для вас, я бы предложил обновить вашу ОС.

я используюconda install scipyчтобы решить эту проблему. У Conda есть специальная версия scipy для Apple M1. Обновите macOS до версии 12, если не хотите использовать Conda.

Другие вопросы по тегам