解决osx-arm64平台上conda默认源没有提供 python=3.7 的官方编译版本的问题

CONDA_SUBDIR=osx-64 conda create -n py37_env python=3.7 是一个用于创建特定架构环境的命令,主要针对 macOS 系统。下面为你详细解析它的功能和作用:

命令功能解析

这个命令的主要功能是创建一个名为 py37_env 的 Conda 环境,并且指定该环境使用 Python 3.7 版本。特别之处在于,它通过 CONDA_SUBDIR=osx-64 这个环境变量,强制 Conda 在创建环境时使用 x86_64 架构的包,而非当前系统的原生架构(如 M1/M2 芯片的 ARM 架构)。

具体参数解释

  • CONDA_SUBDIR=osx-64

    • CONDA_SUBDIR 是 Conda 的一个环境变量,其作用是覆盖系统默认的架构设置。
    • osx-64 代表的是 macOS 系统的 x86_64 架构(也就是传统的 Intel 架构)。
    • 当在 ARM 架构的 macOS(如 M1/M2 芯片的 Mac)上设置这个变量时,Conda 会去下载和安装 x86_64 版本的包,而不是 ARM 版本的包。
  • conda create -n py37_env python=3.7

    • 这是 Conda 用于创建新环境的标准命令。
    • -n py37_env 表示为新环境指定的名称是 py37_env
    • python=3.7 明确了要在环境中安装 Python 3.7 版本。

为什么需要这样做?

在 ARM 架构的 macOS 上使用这个命令,主要有以下几个原因:

  1. 包兼容性问题 :某些 Python 包可能还没有针对 ARM 架构(如 osx-arm64)的版本,通过指定 osx-64 可以使用 x86_64 版本的包,从而解决兼容性问题。
  2. Rosetta 2 支持:Apple Silicon(M1/M2)芯片的 Mac 能够通过 Rosetta 2 模拟器运行 x86_64 架构的应用程序和包。
  3. 特定版本需求 :就像你之前遇到的错误一样,Python 3.7 在 osx-arm64 平台上可能没有可用的版本,此时使用 x86_64 版本就能解决这个问题。

潜在影响

  • 性能方面:由于 x86_64 包需要通过 Rosetta 2 翻译才能在 ARM 芯片上运行,所以可能会导致性能有所下降。
  • 兼容性方面:虽然大多数包都能正常工作,但仍有少数包可能会出现兼容性问题。
  • 环境隔离:该环境中的所有包都会使用 x86_64 版本,与系统的原生 ARM 环境是隔离开的。

如何使用

如果你在 M1/M2 芯片的 Mac 上需要创建一个 Python 3.7 环境,可以按照以下步骤操作:

  1. 临时设置架构

    bash 复制代码
    CONDA_SUBDIR=osx-64 conda create -n py37_env python=3.7
  2. 激活环境

    bash 复制代码
    conda activate py37_env
  3. 验证架构

    bash 复制代码
    python -c "import platform; print(platform.machine())"

    输出结果应该是 x86_64,这表明环境正在使用 x86_64 架构。

替代方法

如果你不想每次都手动设置环境变量,还可以通过修改 Conda 配置来实现:

bash 复制代码
conda config --set subdir osx-64
conda create -n py37_env python=3.7

若要恢复默认设置,使用以下命令:

bash 复制代码
conda config --remove subdir

通过这种方式,你就能在 ARM 架构的 macOS 上成功创建并使用 Python 3.7 环境了。

相关推荐
程序员的世界你不懂4 小时前
Appium+python自动化(八)- 认识Appium- 下章
python·appium·自动化
_r0bin_4 小时前
前端面试准备-7
开发语言·前端·javascript·fetch·跨域·class
zhang98800004 小时前
JavaScript 核心原理深度解析-不停留于表面的VUE等的使用!
开发语言·javascript·vue.js
恸流失4 小时前
DJango项目
后端·python·django
Julyyyyyyyyyyy5 小时前
【软件测试】web自动化:Pycharm+Selenium+Firefox(一)
python·selenium·pycharm·自动化
Fanxt_Ja6 小时前
【JVM】三色标记法原理
java·开发语言·jvm·算法
蓝婷儿6 小时前
6个月Python学习计划 Day 15 - 函数式编程、高阶函数、生成器/迭代器
开发语言·python·学习
love530love6 小时前
【笔记】在 MSYS2(MINGW64)中正确安装 Rust
运维·开发语言·人工智能·windows·笔记·python·rust
水银嘻嘻7 小时前
05 APP 自动化- Appium 单点触控& 多点触控
python·appium·自动化
slandarer7 小时前
MATLAB | 绘图复刻(十九)| 轻松拿捏 Nature Communications 绘图
开发语言·matlab