如何在 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的终端,然后,
- 检查您的终端是否启用了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的那个)和
- 检查您的终端是否未启用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 启动脚本上执行所有操作。但是让我告诉你我是如何以一种干净的方式做到这一点的。
- 为 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。
希望你觉得它超级有帮助。
没有什么是不可能的,让我们去做吧……🎉
文章出处登录后可见!