Как установить 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.