在新的MacBook Air M1上安装Pandas时出现问题

48

我最近购买了一台新的MacBook Air M1,但是我在安装Pandas时遇到了问题,因为macOS/arm64没有可用的预编译二进制文件。我该如何在Apple Silicon Mac上安装Pandas?


2
我不应该问(即这应该已经在你的问题中),但是有什么困难吗? - cs95
12个回答

63

也许已经太晚了。但对我来说唯一有效的解决方案是从源代码进行安装,如果你不想使用rosetta2或者moniconda。

python3 -m pip install virtualenv
virtualenv -p python3.8 venv
source venv/bin/activate
pip install --upgrade pip
pip install numpy cython
git clone --depth 1 https://github.com/pandas-dev/pandas.git
cd pandas
python3 setup.py install

2
这对我没有用。我在M1 Mac上运行Big Sur,出现了错误“无法构建numpy。错误:无法为使用PEP 517的numpy构建whells,不能直接安装。” - Jim
1
我认为对于Python3.8,您不应该遇到这个错误。对于Python3.9,虽然您可以使用错误提示中的提示,但需要从源代码安装git clone https://github.com/numpy/numpy.git && cd numpy && python3 setup.py install。 - rapoma
天才,为我的 Django 项目节省了时间,也感谢 numpy 和 scikit learn。 - Hvitis
1
对我没有用,仍然出现相同的错误:venv/lib/python3.8/site-packages/pandas-1.4.0.dev0+264.g9c0a1ebec6-py3.8-macosx-11.4-arm64.egg/pandas/_libs/interval.cpython-38-darwin.so: mach-o, but wrong architecture - NullPointer
这对我在一台新的Mac Book Pro上运行M1架构的Monterey操作系统有效。我正在使用pyenv。首先,安装了最新的Python 3.8版本。然后从中创建了一个虚拟环境。在该虚拟环境中,我运行了上述的安装和构建。 - TomU
显示剩余2条评论

30

我的有效方法:

pip3 install cython
OPENBLAS="$(brew --prefix openblas)" MACOSX_DEPLOYMENT_TARGET=11.1 pip3 install numpy --no-use-pep517
OPENBLAS="$(brew --prefix openblas)" MACOSX_DEPLOYMENT_TARGET=11.1 pip3 install pandas --no-use-pep517

我正在使用arm64模式。这在Python 3.9.x上不起作用,但在Python 3.8.11上却可以。谢谢。 - George Campbell
使用Python 3.9.x,我尝试安装numpy==1.20.0以满足scikit-learn的要求,这对我起作用了。我之前尝试过OPENBLAS导出的方法,但没有成功。成功的方法是在安装cython时添加--no-use-pep517参数。 - Saheel Godhane

26

有两种方法可以实现这一点。但两种方法的基本过程是相同的。

方法-1

打开终端窗口。运行arch命令。结果应该是arm64。 然后执行arch -x86_64 zsh命令。这将在终端内创建一个x86模拟的zsh会话。现在如果你运行arch命令,结果应该是i386

现在执行pip install pandaspip3 install pandas命令(哪个命令有正确的版本)。这将起作用。 执行exit命令退出模拟的zsh会话。

你也可以在不创建模拟的zsh会话的情况下在x86模拟下执行单个命令。运行arch -x86_64 pip install pandas命令。这将在x86模拟下运行pip命令,但终端保留在本地的arm环境中。


方法-2

使用Rosetta 2打开终端应用程序,这将模拟一个x86环境。 然后执行pip install pandaspip3 install pandas命令(哪个命令有正确的版本) 这应该可以工作。

这个技巧对于几乎所有在ARM架构下安装失败的Python包都适用。


使用Rosetta 2打开终端应用程序

  1. 关闭终端应用程序
  2. 在Finder中找到终端应用程序(通常位于Macintosh HD/Applications/Utilities
  3. 右键单击终端图标 >> 获取信息
  4. 选中标有Open Using Rosetta的复选框
  5. 现在启动终端窗口(新的终端窗口将使用Rosetta仿真打开)

编辑-1: 如果您在x86仿真环境下安装了软件包,则还必须在x86仿真环境下运行Python代码。如果您尝试在本机ARM环境下运行Python,则该软件包将抛出架构不匹配错误,而该软件包是为x86版本安装的。


arch -arm64 pip install pandas or arch -arm64 pip install -r requirements.txt or arch -arm64 zsh && poetry install - Juan
这取决于你的代码库是如何设置的。 - Saroopashree Kumaraguru
谢谢!arch -x86_64 pip3 install pandas解决了问题! - shredEngineer
1
截至2022年5月,经过许多的试错后,我最终不得不放下自尊,避免使用ARM。我一直在尝试安装numpy但始终无法成功。 - Nopiforyou
早就经历过了! - Saroopashree Kumaraguru

14

大多数这些文章没有涉及到“不想”在Rosetta下运行的问题。Apple的TensorFlow分支可以在本地M1模式下工作,但是没有与之匹配的Pandas。 如果选择在Rosetta下运行,则无法找到匹配的TensorFlow。 这是一个赢不了的局面。


如果您使用(mini)conda,那么这并不正确。您可以使用conda install,它似乎是有效的。 - Gerard

11

你只需要使用--no-use-pep517标志,就可以无问题地安装pandas。

以下是我在我的笔记本电脑上安装的方法:

~/Documents/projects/m-proj                                                                                                                                               
❯ pip install cython --no-use-pep517 
Collecting cython
  Using cached Cython-0.29.22-py2.py3-none-any.whl (980 kB)
Installing collected packages: cython
Successfully installed cython-0.29.22

~/Documents/projects/m-proj                                                                                                                                               
❯ pip install numpy --no-use-pep517
Collecting numpy
  Using cached numpy-1.20.1.zip (7.8 MB)
Using legacy 'setup.py install' for numpy, since package 'wheel' is not installed.
Installing collected packages: numpy
    Running setup.py install for numpy ... done
Successfully installed numpy-1.20.1

~/Documents/projects/m-proj                                                                                                                                           
❯ pip install pandas --no-use-pep517
Collecting pandas
  Using cached pandas-1.2.3.tar.gz (5.5 MB)
Collecting python-dateutil>=2.7.3
  Using cached python_dateutil-2.8.1-py2.py3-none-any.whl (227 kB)
Requirement already satisfied: pytz>=2017.3 in ./venv-trans/lib/python3.9/site-packages (from pandas) (2021.1)
Requirement already satisfied: numpy>=1.16.5 in ./venv-trans/lib/python3.9/site-packages (from pandas) (1.20.1)
Requirement already satisfied: six>=1.5 in ./venv-trans/lib/python3.9/site-packages (from python-dateutil>=2.7.3->pandas) (1.15.0)
Using legacy 'setup.py install' for pandas, since package 'wheel' is not installed.
Installing collected packages: python-dateutil, pandas
    Running setup.py install for pandas ... done
Successfully installed pandas-1.2.3 python-dateutil-2.8.1

2
这对我来说在numpy-1.20.1上可以工作,但是在numpy-1.20.2上不行,而这是python3.9所需的。这似乎是一个非常时间相关的问题,因为现在我可以使用pyenv在M1(arch arm64)上安装python3.9,但无法安装python3.8。能够在arm64上获得Python和Pandas将是很好的事情。 - PeterK
这对我的m2 mbp和numpy=1.19 pandas=1.1有效。 - Q. Qiao

6

Miniconda目前是最简单的选项。

brew install --cask miniforge
conda create -n myenv python=3.8
conda init zsh
conda activate
conda install pandas

如果您需要一个旧版本(conda-forge中不提供arm64版本)。
brew install --cask miniforge
conda create -n myenv python=3.8
conda init zsh
conda activate
pip install cython
curl -L https://github.com/pandas-dev/pandas/archive/v1.1.2.zip --output pandas.zip  
unzip pandas.zip     
cd pandas-1.1.2 
python3 setup.py install
rm pandas.zip
rm -rf pandas-1.1.2

5

太好了,我认为Miniforge是正确的选择。我正在阅读《Pandas实战》并且他们的建议是使用Anaconda。然而,Anaconda Apple Silicon页面实在是太令人困惑了! - JGFMK

4

所以我找到了解决方案。 显然,即使我勾选了使用Rosetta打开术语的框,第一次它也没有执行。 最终我是通过在术语上执行“arch”才发现这一点,它返回了“arm64”,而不是“i386”。 重新启动显然使“rosetta”选择生效,然后我才能成功地“pip3 install pandas”。当然,在本机arm模式下安装它会更好。 感谢大家提供的指针。


不同但相关的问题:您有关于如何安装TensorFlow的建议吗?“pip3 install https://storage.googleapis.com/tensorflow/mac/cpu/tensorflow-2.4.0-cp38-cp38-macosx_10_14_x86_64.whl”返回“ERROR:tensorflow-2.4.0-cp38-cp38-macosx_10_14_x86_64.whl不支持此平台。” - user505117

4

这篇文章基本上只是说在iTerm2中勾选“使用Rosetta”即可。但这对我没有帮助。 - Ben Butterworth
2022年3月8日更新:搭载M1芯片和MacOS Monterey的Macbook。对我有效的方法仍然是在Rosetta模式下打开zsh,并按照常规安装程序进行操作。虚拟环境的方法对我仍然不起作用。 - Vipin Menon

3

当我尝试了这些步骤后,一切都正常,直到第七步时出现了一个错误:ModuleNotFoundError: No module named 'numpy'。 - most200

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接