【问题标题】:Anaconda and upgrading to new M1 MacAnaconda 和升级到新的 M1 Mac
【发布时间】:2021-04-08 13:20:22
【问题描述】:

背景

我刚得到一台新的 M1 mac mini 开发机器,并使用苹果的迁移助手从我的旧 x86 mac 迁移。

这样做还将我所有的 conda 环境复制到新机器上(它们都在我的主目录中)

我安装了最新版本的 anaconda 和 anaconda 以及我所有的 python 代码和环境似乎都可以正常工作(这包括一堆轮子模块,特别是 numpy/scipy)。

我在谷歌上搜索了我的问题,但在任何地方都找不到任何好的答案 - 所以我想我会问,因为这似乎是其他人会遇到的很常见的情况

问题

  • 有人知道conda forge提供的python/numpy/scipy等M1原生版本的状态吗?
  • 我认为我的环境中用于 python/numpy 等的所有二进制文件都仍然是旧的 x86 版本,因为它们都在我的主目录中的环境中,并且通过仿真运行。那么,您如何着手将这些更改/更新为 M1 arm 本机 版本是否/何时可用?

【问题讨论】:

标签: python-3.x macos anaconda conda


【解决方案1】:

这里的答案会随着时间的推移而发展,所以这里是我截至 2021 年 1 月 27 日所掌握的最新知识。

在仿真模式下安装 conda 完全可以正常工作。您需要做的就是将其安装在以仿真模式运行的终端中,或者使用尚未移植的终端仿真器进行安装。

一旦您的 conda 环境启动并运行,其他一切看起来和感觉就像在 x86 Mac 上一样。

如果你想了解更多细节,我blogged about my experience。希望对您有所帮助。

【讨论】:

  • 谢谢 - 我最终只是选择了你所做的模拟路线,因为我不想像你遇到的那样处理非 anaconda miniconda 的潜在兼容性问题。现在对我来说一切都很好,除了我还没有看到 python 或模块是 ARM 还是 x86。
  • 我的荣幸。为了回应您的后续观点,大多数 Python 模块都是纯 Python,因此它们只需要 Python 解释器即可工作,而支持的 ARM/x86 架构无关紧要。我认为,唯一重要的地方是是否需要 C 扩展。 (正如我在博文中提到的,JAX 就是一个例子。)
  • 我使用的许多瓶颈模块都被编译了...numpy、scipy 等——因此获得这些模块的本地版本会很棒——但更好的是让 conda 自动检查拱门并为您安装合适的
  • 这篇博文非常有用。作为 MacPorts 的长期用户,放手会很痛苦,但现在是尝试 mini condo 的时候了,我可能还会将 MP 用于 wget 之类的东西。
  • 我将为我的 Macbook M1 安装 miniconda。什么是仿真模式?如果我只是关注 miniconda 网站有什么问题? docs.conda.io/en/latest/miniconda.html
【解决方案2】:

大约 2 周前我拿到了 M1,并设法从 conda-forgepip 安装了我需要的所有东西。您可以下载安装程序here。 截至 2 月 5 日,OSX-ARM64 也正式支持 Homebrew。

【讨论】:

    【解决方案3】:

    截至 2021 年 7 月的快速更新。

    TLDR

    • conda-forge group 有一个M1 原生 conda 安装程序here
    • 安装很简单 - 运行安装程序,conda 即可启动并运行。
    • 这将安装 M1 本机 conda,并且该 conda 的默认环境将默认安装 M1 本机 Python 版本和 M1 本机版本的模块(如果可用)
    • 现在 conda-forge 频道上似乎有适用于大多数常见模块的原生 osx M1 原生轮子

    当前状态

    似乎 Anaconda 仍然没有原生 M1 版本,Miniconda 也没有。 ...我不明白为什么花了这么长时间,而且似乎仍然没有原生 M1 支持,但这是一个单独的问题。

    替代

    但是,正如上面提到的 steff,conda-forge(如the group responsible for maintaining the conda-forge channel确实有一个安装程序,用于他们的 conda 版本,它本身既是本机 M1,也可以设置您的在可用的情况下拉动 M1 原生车轮的环境。他们称之为Miniforge

    他们的 github 是here

    他们的Miniforge 的各种安装程序(通过直接下载、curl 或自制软件)可以在他们的 github 页面(上图)上找到 - ARM 原生 miniforge 安装程序的直接链接是 here

    快速搜索 conda-forge show 的几乎所有常见模块现在都提供原生 M1 轮子。 (寻找支持平台'osx-arm64` 例如numpy

    注意事项

    我还没有对此进行过广泛的测试,我不确定如果非 M1 车轮可用会发生什么(我相信它会默认下载无拱形版本)。

    我也不确定/尚未测试是否可以将 M1 车轮与 x86 mac 车轮混合搭配。 (我猜这会起作用,但还没有尝试过)。

    我也只使用 conda 的 pip 进行了最低限度的测试,以及它识别/尝试下载/解析 M1 与 x86 pip 包的能力。

    【讨论】:

    • “我相信它会默认下载无架构版本。”嗯?大多数软件包要么是特定于架构的,要么是非架构的,而不是两者兼而有之。
    • 我怀疑 x86 和 M1 的轮子可以混合使用。如果它们包含任何已编译的代码,则它们不能一起使用。 Apple's docs say: "系统禁止你在同一个进程中混用 arm64 代码和 x86_64 代码。"
    • 关于 conda-forge 团队如何使构建工作的上下文,read this page. 听起来这是一项英勇的努力,但他们不得不使用一些非标准的技巧来获得它一切正常。
    • 如果您安装 arm64 (M1) 版本,那么它将安装 arm64 轮子,或者安装 noarch。
    • 是的 - 我在 conda forge github 网站上确认,您不能同时运行 arm64 和 x86 模块。但是,conda-forge install 确实 让您可以同时安装 x86 arm64 环境,并且您可以在需要时来回切换。
    【解决方案4】:

    我通过 miniforge(Apple 版本)和 Spyder(Intel 版本)通过 homebrew 安装了本机版本的 python3,一切对我来说都很好,但有一个例外,我在设置“图形后端”时观察到一种奇怪的行为选择“自动”而不是“内联”。

    Spyder >>> 首选项 >>> IPython 控制台 >>> 图形 >>> 图形后端 >>> 内联或自动

    当我使用“内联”选项启动 Spyder 并切换到“自动”时,打开的内核按预期运行。但是,如果我打开新的控制台,它们根本就不起作用。重新启动 Spyder 后问题仍然存在。我设法在单独的窗口中绘制图形的唯一方法是启动 Spyder,并将 IPython 控制台“图形后端”设置为“内联”,然后将其更改为“自动”。

    如果我通过终端运行 python3,绘制图形也可以正常工作。

    我的安装命令是:

    brew install --cask miniforge
    conda init zsh
    conda activate
    brew install --cask spyder
    brew install PyQt@5
    pip3 install matplotlib
    

    【讨论】:

    • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
    猜你喜欢
    • 2022-10-05
    • 2022-10-12
    • 1970-01-01
    • 2020-06-19
    • 2016-05-27
    • 2019-01-30
    • 1970-01-01
    相关资源
    最近更新 更多