站点图标 AI技术聚合

如何在 Mac Book M1 上并排安装 Miniconda x86_64 和 Apple M1

如何在 Mac Book M1 上并排安装 Miniconda x86_64 和 Apple M1

Miniconda x86_64 和 Miniconda Apple M1 在 Mac Book M1 上并排

如果您是使用 Apple 的 Mac M1 进行工作的 Python 开发人员/ML 工程师/数据科学家,您可能知道没有 arm64 分发项目依赖项的痛苦🥲。一种解决方法是通过启用了rosetta2的终端使用像Anaconda3/Miniconda3这样的包管理器。

不过幸运的是现在 Apple M1 得到了 Anaconda 的正式支持,您可以下载并安装 Anaconda3/Miniconda3 用于您的带有苹果硅芯片的 Mac。但作为一名 ML 工程师,我想保留 Miniconda3 的两种风格(x86_64 和 Apple M1),因为我正在为这两种架构进行产品开发。[0]

如何让 Miniconda3 x86_64 和 Miniconda3 Apple M1 并排,这甚至可能吗?

答案是“是”,我花了一些时间⏰想出如何以一种方便的方式做到这一点。所以我决定在这里写博客,以便对像我这样的许多人有用。

先决条件:启用 Rosetta2 的终端。

Install Miniconda3 x86_64

打开启用了rosetta2的终端,然后,

  1. 检查您的终端是否启用了rosetta2
$ uname -m
x86_64

如果你得到 x86_64 那么你在一个启用了rosetta2的终端上

2. 下载 Miniconda3 x86_64 bash 安装程序

$ wget https://repo.anaconda.com/miniconda/Miniconda3-latest-MacOSX-x86_64.sh

3. Run Installer

$ sh ./Miniconda3-latest-MacOSX-x86_64.sh

4.会提示review license agreement,回车继续

5. 然后一直按回车,直到出现以下提示。一旦你得到它,输入yes并按回车继续

6.接下来会提示你输入安装路径

在这里输入 /Users/[您的用户名]/miniconda3-intel`(让我们将此路径称为 Miniconda x86_64 路径)或您喜欢的任何内容,主要思想是您应该保留 Miniconda Apple M1 的默认安装路径(只需区分两种安装)

7.它将下载基本包并在指定路径安装Miniconda x86_64。完成后会提示是否运行conda init。

当您收到此提示时,键入 no 并按 enter。我们不想将 conda 初始化程序添加到您的终端启动脚本(即 .bashrc 或 .zshrcor 其他)

现在我们已经成功安装了 Miniconda3 x86_64。接下来,我们需要以相同的方式安装 Miniconda Apple M1,除了一些更改。

安装 Miniconda3 Apple M1

打开一个终端(没有rosetta2的那个)和

  1. 检查您的终端是否未启用rosetta2(默认M1终端)
$ uname -m
arm64

如果你得到 arm64 那么你在默认终端上

2. 下载 Miniconda3 x86_64 bash 安装程序

$ wget https://repo.anaconda.com/miniconda/Miniconda3-latest-MacOSX-arm64.sh

3. 然后做类似之前的安装过程(从第3步到第5步)。[0][1]

4. 提示安装路径时,建议安装在默认路径 Users/[your user name]/miniconda3/ 。如果不使用不同的路径。 (让我们将此路径称为 Miniconda Apple M1 路径)。

5、安装完成后会提示是否运行conda init,输入no回车。

为两种安装配置 conda init

通常,当我们运行 conda init 时,它会根据我们使用的 shell 类型将一些 shell 命令添加到我们的终端启动文件中。

但在这里我们不能简单地将 x86_64 和 Apple M1 的 init 添加到同一个文件中。根据终端会话的架构激活正确的 conda 安装需要更加智能。

您可以简单地在 .zshrc 或您正在使用的任何 shell 启动脚本上执行所有操作。但是让我告诉你我是如何以一种干净的方式做到这一点的。

  1. 为 conda init 创建自定义启动脚本
$ mkdir ~/.custrc/ && touch ~/.custrc/.condarc

2. 打开并将这个 conda init 函数添加到脚本中

init_conda() {
# >>> conda initialize >>>
conda_path_m1="/Users/mathanraj/miniconda3"
__conda_setup="$('${conda_path_m1}/bin/conda' 'shell.zsh' 'hook' 2> /dev/null)"
if [ $? -eq 0 ]; then
eval "$__conda_setup"
else
if [ -f "${conda_path_m1}/etc/profile.d/conda.sh" ]; then
. "${conda_path_m1}/etc/profile.d/conda.sh"
else
export PATH="${conda_path_m1}/bin:$PATH"
fi
fi
unset __conda_setup
# <<< conda initialize <<<
}
init_conda_intel() {
# >>> conda initialize >>>
conda_path_intel="/Users/mathanraj/miniconda3-intel"
__conda_setup="$('${conda_path_intel}/bin/conda' 'shell.zsh' 'hook' 2> /dev/null)"
if [ $? -eq 0 ]; then
eval "$__conda_setup"
else
if [ -f "${conda_path_intel}/etc/profile.d/conda.sh" ]; then
. "${conda_path_intel}/etc/profile.d/conda.sh"
else
export PATH="${conda_path_intel}/bin:$PATH"
fi
fi
unset __conda_setup
# <<< conda initialize <<<
}

Here,

  • conda_path_m1 是我为 Apple M1 安装 Miniconda 的地方
  • conda_path_intel 是我为 x86_64 安装 Miniconda 的地方

根据您安装 Miniconda Apple M1 和 x86_64 的位置相应地替换路径。

3. 打开并将下面的行添加到你的 shell 启动脚本中,在我的例子中是 .zshrc

$ open ~/.zshrc

Add

# init conda based on arch
source ~/.custrc/.condarc
if [[ $(uname -m) == 'x86_64' ]]; then
init_conda_intel
echo "conda x86_64 is activated"
else
init_conda
echo "conda m1 is activated"
fi

这将为您的终端行为添加小智能。基本上,它只是根据终端会话的架构配置合适的 conda 安装。

一切就绪,现在关闭所有正在运行的终端会话并尝试

  • 打开启用了rosetta2的终端,你会得到“conda x86_64 isactivated”。如果你打印 conda env list
  • 打开默认终端(没有rosetta2),你会得到“conda m1 isactivated”。如果你打印 conda env list

注意:如果您仔细观察,它会在这两种情况下打印所有可用的 conda 环境。但是当它来自启用了rosetta2的终端时,请注意,名称将只打印在miniconda3-intel下的环境中,并且miniconda3-intel下的基本路径将带有(*)符号。同样适用于 miniconda3-m1。

希望你觉得它超级有帮助。

没有什么是不可能的,让我们去做吧……🎉

文章出处登录后可见!

已经登录?立即刷新
退出移动版