如何在 ARM MacOS 机器上使用 Rosetta2 将 Python 作为 X86 运行

chu*_*hts 7 python macos rosetta-2

我有一个 python 应用程序,下游依赖于仅作为 X86 提供的动态库。

该应用程序在 X86 MacOS 计算机上运行,​​但在 ARM MacOS 计算机上运行失败,并显示ImportError.

我已经lipo -archs在库上运行过,它们x86_64只是。我在 virtualenv 中运行 Python,它是通用二进制文件x86_64 arm64。应用程序在安装时构建的中间目标文件也是通用二进制文件x86_64 arm64

我怀疑 Python 作为 ARM 应用程序本地运行,但由于依赖关系,我需要它作为 X86 应用程序运行。

是否有 MacOS 或 Rosetta2 选项或环境设置可供我使用来强制执行 X86 Python 二进制文件而不是 ARM 二进制文件?

jki*_*hen 14

Conda 可以在 Mac Arm 上创建 x86 环境。

  1. 安装迷你康达
  2. 创建为 x86 配置的环境
    conda create -n my_x86_env -y
    conda activate my_x86_env
    conda config --env --set subdir osx-64
    
    Run Code Online (Sandbox Code Playgroud)
  3. 安装您想要的 Python 版本
    conda install python=3.10
    
    Run Code Online (Sandbox Code Playgroud)
  4. 使用 conda 或 pip 安装包
    conda install numpy
    pip install networkx
    
    Run Code Online (Sandbox Code Playgroud)

对于此环境 ( my_x86_env),python 和 pip 是 x86 版本,因此它们只会从 anaconda、conda-forge 和 pypi 获取 x86 版本。您创建但未运行的任何环境都conda config --env --set subdir osx-64将是arm64环境。因此,您可以在需要时获得本机速度,并在需要时获得与纯 x86 软件包的兼容性。


chu*_*hts 5

看起来唯一的方法是安装 X86 版本的 python。

我在这里找到了指导方法 - https://towardsdatascience.com/how-to-use-manage-multiple-python-versions-on-an-apple-silicon-m1-mac-d69ee6ed0250

但无法完全让 pyenv 构建部分正常工作。

所以在Rosetta i386终端我brew86安装了python。这将一个 X86 版本的 python 放入其中/usr/local/bin/python3,我可以从中创建一个仅限 X86 的 virtualenv。

总的来说,这些步骤来自上面的链接(减去 pyenv 部分):

  1. 安装罗塞塔
  2. 创建 Rosetta 终端
  3. 在 Rosetta 终端中安装 X86 自制程序
  4. 为 X86 自制程序创建别名/usr/local/bin/brew
  5. 使用X86的brew安装X86的python(结束/usr/local/bin/python3
  6. 基于X86 python路径创建virtualenv
  7. 点安装