La instalación en el chip m1 para los siguientes paquetes: Numpy 1.21.1, pandas 1.3.0, torch 1.9.0 y algunos otros funciona bien para mí. También parecen funcionar correctamente mientras se prueban. Sin embargo, cuando intento instalar scipy o scikit-learn a través de pip, aparece este error:
ERROR: rueda de construcción fallida para numpy
Error al construir numpy
ERROR: No se pudieron construir ruedas para numpy que usan PEP 517 y no se pueden instalar directamente
¿Por qué Numpy debería volver a construirse cuando ya tengo instalada la última versión de pip?
Todas las instalaciones anteriores se realizaron con python3.9 -m pip install ... en Mac OS 11.3.1 con el chip apple m1.
Tal vez alguien sepa cómo lidiar con este error o si es solo cuestión de tiempo.
Consulte esta nota de scikit-learn sobre
Instalación en hardware Apple Silicon M1
La plataforma
macos/arm64recientemente presentada (a veces también conocida comomacos/aarch64) requiere que la comunidad de código abierto actualice la configuración y la automatización de la compilación para admitirla correctamente.En el momento de escribir este artículo (enero de 2021), la única forma de obtener una instalación funcional de scikit-learn en este hardware es instalar scikit-learn y sus dependencias desde la distribución de conda-forge , por ejemplo, utilizando los instaladores de miniforge:
https://github.com/conda-forge/miniforge
El siguiente problema rastrea el progreso para hacer posible la instalación de scikit-learn desde PyPI con pip:
No sé por qué se volvería a compilar numpy (¿quizás scipy tiene otros requisitos de versión?), Pero puedo informar sobre cómo instalar scipy y scikit-learn. Acabo de tener éxito usando la siguiente secuencia de comandos, basada en Python 3.8.11 (especialmente la compilación de scipy tomó algo de tiempo, por lo que este proceso no es rápido, desafortunadamente):
# SciPy: python -m pip install --no-cache --no-use-pep517 pythran cython pybind11 gast"==0.4.0" pyenv rehash python -m pip install --no-cache --no-binary :all: --no-use-pep517 scipy"==1.7.1" # Scikit-Learn python -m pip install --no-use-pep517 scikit-learn"==0.24.2"Por lo tanto, parece que la información en la página de inicio de scikit-learn sobre la ruta de instalación necesaria de conda está desactualizada.
Había herramientas de desarrollador de Apple (XCode, xcode-select) y algunos otros paquetes instalados a través de homebrew, y en un entorno pyenv virtualenv antes, que también podrían ser relevantes, así que los agrego aquí abajo:
brew install openblas openssl@1.1 pkg-config pyenv pyenv-virtualenv python -m pip install numpy==1.19.5Necesitaba la versión numpy anterior porque también hay tensorflow instalado en este entorno que no es compatible con las versiones numpy más nuevas; No sé si su numpy más nuevo podría contribuir a los problemas que encontró.
Parece que actualmente hay muchos cambios con respecto a la compatibilidad con Apple M1, por lo que esto podría volverse aún más fácil pronto.
Finalmente logré ordenar esto usando los pasos a continuación:
>> /opt/homebrew/bin/brew install openblas >> export OPENBLAS=$(/opt/homebrew/bin/brew --prefix openblas) >> export CFLAGS="-falign-functions=8 ${CFLAGS}" >> git clone https://github.com/scipy/scipy.git >> cd scipy >> git submodule update --init >> /opt/homebrew/bin/pip3 install . >> /opt/homebrew/bin/pip3 install scikit-learnpython3 -m venv --system-site-packages .venvSupongo que Scipy y Numpy no son compatibles directamente con el procesador arm64 (MAC M1 OS BigSur y versiones superiores), lo que requiere que los usuarios instalen y creen las dependencias manualmente. Encontré una solución creando un entorno virtual con la versión 3.8 de Python. Una vez que se implementan las versiones finales, estos cambios se pueden eliminar fácilmente sin ningún conflicto.
python3.8 -m venv <nombre_entorno>
fuente <nombre_entorno>/bin/activate
pip3 instalar numpy
pip3 instalar scipy
Estoy hablando aquí porque estoy instalando todo esto usando un contenedor Docker. La máquina host es M1 MBP con Monterey 12.0.1. Encontré la siguiente solución en este hilo en GitHub. Parece que el equipo de scipy tendrá una actualización pronto.
Asegúrese de estar en Python 3.9 y usando HomeBrew, ejecute brew install openblas . Una vez hecho esto, puede agregar las siguientes líneas a su Dockerfile:
RUN OPENBLAS="/opt/homebrew/opt/openblas" CFLAGS="-falign-functions=8 ${CFLAGS}" pip3 install scipy RUN OPENBLAS="/opt/homebrew/opt/openblas" CFLAGS="-falign-functions=8 ${CFLAGS}" pip3 install scikit-learnLa mejor manera de hacer esto es usando Miniforge . Trabajo confirmado para Macbook M1 y OS 12 (monterey)
En macbook M1, puede instalar miniforge usando el comando brew install miniforge .
Una vez que esté instalado, puede crear un entorno virtual usando el comando conda create -n .venv python
activar el entorno usando el comando conda activate .venv
Instale scikit-learn en el entorno mediante conda install scikit-learn
El rastreador de problemas oficial relacionado con la instalación de scikit-learn está en sus problemas de github. Algunas de las soluciones sugeridas funcionan para Mac OS 11, pero no para Mac OS 12.
Finalmente encontré la solución de trabajo aquí
scikit-learn ahora funciona a través de pip ✅ Primero prepare primero brew install openblas : tiene instrucciones para diferentes procesadores ( wikipedia )
brew install openblas export OPENBLAS=$(/opt/homebrew/bin/brew --prefix openblas) export CFLAGS="-falign-functions=8 ${CFLAGS}" # ^ no need to add to .zshrc, just doing this once. pip install scikit-learn # ==0.24.1 if you wantFuncionó muy bien en M1 Pro 🎉
Pip descargó la fuente de Pipy, luego construyó la rueda dirigida a MacOS X 12.0 y arm64 (silicio de Apple): scikit_learn-1.0.1-cp38-cp38-macosx_12_0_arm64.whl .
Building wheels for collected packages: scikit-learn Building wheel for scikit-learn (pyproject.toml) ... done Created wheel for scikit-learn: filename=scikit_learn-1.0.1-cp38-cp38-macosx_12_0_arm64.whl size=6364030 sha256=0b0cc9a21af775e0c8077ee71698ff62da05ab62efc914c5c15cd4bf97867b31 Successfully built scikit-learn Installing collected packages: scipy, scikit-learn Successfully installed scikit-learn-1.0.1 scipy-1.7.3Nota sobre Pipy: generalmente descargamos una rueda preconstruida (sí, esto es excelente para una distribución confiable y garantizar la compatibilidad). O, si no existe una rueda preconstruida (triste), entonces descargamos un tar.gz y lo construimos nosotros mismos. Esto sucede porque los autores no publican una rueda preconstruida en Pipy, pero cada vez más personas agregan esto a su flujo de trabajo de CI (acciones de github). Construir la rueda nosotros mismos requiere más tiempo de CPU y, por lo general, es menos confiable, pero funciona en este caso.
Aquí estamos descargando una rueda preconstruida que tiene muy pocas limitaciones: funciona para cualquier versión de python 3, para cualquier sistema operativo, para cualquier arquitectura (como amd64 o arm64): click-8.0.3-py3-none-any.whl
Collecting click>=7.0 Downloading click-8.0.3-py3-none-any.whl Aparentemente, aquí no teníamos ninguna rueda disponible, así que tenemos que construirla nosotros mismos con setuptools ejecutando setup.py .
Collecting grpcio>=1.28.1 Downloading grpcio-1.42.0.tar.gz (21.3 MB) |████████████████████████████████| 21.3 MB 12.7 MB/s Preparing metadata (setup.py) ... done ## later in the process it installs using setuptools Running setup.py install for grpcio ... doneBuena suerte y feliz tubería.
Apple M1 Pro, mac OS 12.1
Python 3.9.10 (main, Jan 15 2022, 11:40:53) [Clang 13.0.0 (clang-1300.0.29.3)] on darwin pip 22.0.3instalar numpy y scipy
brew install openblas gfortran OPENBLAS="$(brew --prefix openblas)" pip install numpy==1.19.3 OPENBLAS="$(brew --prefix openblas)" pip install scipy==1.7.2instalar scikit-learn (0.21.3)
pip install cython brew install libomp export CC=/usr/bin/clang export CXX=/usr/bin/clang++ export CPPFLAGS="$CPPFLAGS -Xpreprocessor -fopenmp" export CFLAGS="$CFLAGS -I/opt/homebrew/Cellar/libomp/13.0.1/include" export CXXFLAGS="$CXXFLAGS -I/opt/homebrew/Cellar/libomp/13.0.1/include" export LDFLAGS="$LDFLAGS -L/opt/homebrew/Cellar/libomp/13.0.1/lib -lomp" export DYLD_LIBRARY_PATH=/opt/homebrew/Cellar/libomp/13.0.1/lib pip install scikit-learn==0.21.3Resolví esto usando poesía y configurando dependencias restringidas de python scipy = { version = "^1.8.0", python = "~3.9" } en pyproject.toml.
A partir del 14 de marzo (día del pastel) de 2022, todo lo que tenía que hacer era escribir lo siguiente en un entorno conda:
conda install --channel=conda-forge scikit-learnEso fue todo. Estoy ejecutando una MacBook Pro, M1, 2020 de 13". Python 3.8 en el entorno conda. MacOS 11.6.