【问题标题】:Pip is trying to build numpy instead of taking pre-built versions on M1 MacPip 正在尝试构建 numpy 而不是在 M1 Mac 上采用预构建版本
【发布时间】:2021-05-23 12:21:03
【问题描述】:

我有一个 M1 mac,我试图做一些变通方法来从构建中安装 numpy。我无法让任何工作,但现在我正在尝试在使用 Rosetta 运行终端时进行“标准安装”。

当我这样做时,输出如下所示

MacBook-Pro ~ pip install numpy                
Collecting numpy
  Using cached numpy-1.20.1.zip (7.8 MB)
  Installing build dependencies ... done
  Getting requirements to build wheel ... done
    Preparing wheel metadata ... done
Building wheels for collected packages: numpy
  Building wheel for numpy (PEP 517) ... error

之后是一堆输出,最终无法构建。我不希望它尝试构建,但希望它采用准备就绪的预构建安装。我确定我在某处进行了一些配置导致此问题,但有什么方法可以撤消它吗?

我不太明白的另一件事是我已经对 pip 缓存进行了核对,所以我什至不知道它从哪里得到这个“缓存的 numpy”

我知道我正在使用正确的架构,给出以下内容

MacBook-Pro ~ uname -m                              
x86_64

更新 还尝试运行强制仅使用以下二进制文件,仍然没有运气

MacBook-Pro ~/Downloads pip install numpy --only-binary=:
all:
ERROR: Could not find a version that satisfies the requirement numpy
ERROR: No matching distribution found for numpy

添加版本信息以供参考

MacBook-Pro  ~  python --version                1 ↵  py3
Python 3.9.1
MacBook-Pro  ~  pip --version                     ✔  py3
pip 21.0.1 from /Users/<>/py3/lib/python3.9/site-packages/pip (python 3.9)

我还要注意,我使用的是 venv,并且我的 python 安装是使用本机 ARM homebrew 版本安装的

【问题讨论】:

  • 只是好奇,为什么uname -m 在苹果m1 上显示x86_64?为什么不显示 arm64?
  • 因为我正在使用 Rosetta 运行终端

标签: python macos numpy apple-m1


【解决方案1】:

它正在查找您缓存的源 numpy 包(而不是二进制轮)。

你可以:

  1. 从缓存中删除它。 或
  2. 使用 --only-binary 显式安装,这将强制 pip 下载二进制轮。

【讨论】:

  • 对不起,我想我可能在你打字的时候添加了这个注释,但是我核对了 pip 缓存,仍然看到“缓存”的 numpy(即使在我的整个驱动器中搜索我找不到的 numpy它)。我也试过这个解决方案来强制二进制,它说它找不到匹配的发行版。将此添加到问题中
  • 你的python版本是多少?你的 pip 版本是多少?
  • 在“nuked”中,你试过python -m pip cache purge吗?
  • 我没有这样做,从驱动器本身删除文件。运行该命令确实删除了 58 个文件。但是尝试再次安装 numpy 时仍然得到相同的结果
  • 我的一个理论是它正在寻找 1.20 的“缓存版本”doesn't have wheels out yet 所以我不知道为什么它不寻找 1.19
【解决方案2】:

我不会将此称为 THE 答案,但我已经开始工作的答案是 Anaconda Navigator

它有一个可视安装程序,可以在 M1 mac 上开箱即用。此外,当我使用导航器启动一个激活了 ipython 的终端时,给出的命令有效并且生成的环境有 numpypandas 工作。

仍在寻找合适的原生 M1 解决方案

【讨论】:

    【解决方案3】:

    这在我的 M1 上使用 python 3.92 virtualenv 中的 pip 对我来说很重要:

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

    它避免了 pep517 有问题的构建

    【讨论】: