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

问题描述 投票:0回答:3

我有一个 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 二进制文件吗?

python macos rosetta-2
3个回答
14
投票

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

  1. 安装miniconda
  2. 创建为 x86 配置的环境
    conda create -n my_x86_env -y
    conda activate my_x86_env
    conda config --env --set subdir osx-64
    
  3. 安装你想要的Python版本
    conda install python=3.10
    
  4. 使用 conda 或 pip 安装软件包
    conda install numpy
    pip install networkx
    

对于此环境(

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


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. /usr/local/bin/brew
  5. 中为 X86 自制程序创建别名
  6. 使用X86的brew安装X86的python(结束了
    /usr/local/bin/python3
  7. 基于X86 python路径创建virtualenv
  8. 点安装

0
投票

您可以在使用

arch
命令执行通用二进制文件时选择所需的架构。

在终端中写入:

arch -x86_64 python -m pip install --user virtualenv
arch -x86_64 python -m venv env
source env/bin/activate
arch -x86_64 python -m pip install numpy

执行脚本或模块时,必须在 python 命令前添加

arch -x86_64
,例如:

arch -x86_64 python my_script.py
© www.soinside.com 2019 - 2024. All rights reserved.