Mac 配置 miniconda 环境

1,015 阅读4分钟

背景

之前一直使用 Python 的原生环境, 缺点就是环境管理起来不算很方便, 最近工作原因需要搞一些自然语言处理方面的东西, 就顺便来配一下 miniconda 的环境来。

为什么要用 miniconda

anaconda 中文文档, minicoda 算是 anaconda 的一个简化版吧, 好像是去掉了不咋会用图形界面? 其他命令应该都差不多的。 多余的东西大家自己去找资料(网上全都是), 这里只大概说一下我为什么要用。

  • 环境管理(主要)。
  • 自带一些科学计算包, 不用自己再安装了。
  • 和同事对接方便点, 避免环境移植后乱七八糟的错误。
  • 顺便学习点新东西。

安装

安装文档, 就参照文档来就行, 没什么麻烦的, 主要是想说下后边的配置问题。

# miniconda 安装
mkdir -p ~/miniconda3

curl https://repo.anaconda.com/miniconda/Miniconda3-latest-MacOSX-arm64.sh -o ~/miniconda3/miniconda.sh

bash ~/miniconda3/miniconda.sh -b -u -p ~/miniconda3

rm -rf ~/miniconda3/miniconda.sh

# shell 设置
~/miniconda3/bin/conda init zsh
source ~/.zshrc

到此为止, 你的 conda 环境就算是配好了, 能正常使用了。

虚拟环境迁移

但是呢, 既然发了帖子, 肯定是得有点不太一样的东西, 我习惯把工具放在 /usr/local 目录下边, 所以呢, 要做些修改。

# miniconda 安装
mkdir -p ~/miniconda3

curl https://repo.anaconda.com/miniconda/Miniconda3-latest-MacOSX-arm64.sh -o ~/miniconda3/miniconda.sh

bash ~/miniconda3/miniconda.sh -b -u -p /usr/local/miniconda3/

rm -rf ~/miniconda3/miniconda.sh

# shell 设置
/usr/local/miniconda3/ init zsh
source ~/.zshrc

其实就是把安装的位置变一下, 做到这里之后发现个问题, 就是他每次创建的虚拟环境都会在 /usr/local/miniconda3/envs 目录下边, 那肯定不行啊, 我就想再把他迁移一下。

# 在家目录下创建 .conda 及其配置文件
mkdir ~/.conda
mkdir ~/.conda/envs
mkdir ~/.conda/pkgs

# 修改 conda 配置文件并保存
vim ~/.condarc
# 加入以下部分 (目录写你的家目录下刚创建的 .conda)
envs_dirs:
  - /Users/noone/.conda/envs
pkgs_dirs:
  - /Users/noone/.conda/pkgs

# 查看是否修改成功
conda info
# 在输出的 envs directories 列中可以看到新加入的环境目录, 如果不是处在最前列可以使用下边命令提前。
conda config --add envs_dirs ~/.conda/envs

可以再配置一下下载源(换成国内的)

conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --set show_channel_urls yes

至此为止, 正常使用没什么问题了, 事少的大哥们就可以散了。

基础命令介绍

# 创建一个名为 Python_test 且使用 python3.8 的虚拟环境
conda create -n Python_test python=3.8

# 查看所有虚拟环境, * 指向当前使用环境
conda env list

# 进入 Python_test 的虚拟环境
conda activate Python_test

# 退出虚拟环境
conda deactivate

# 删除虚拟环境
conda remove -n Python_test --all

没什么大用的配置

就在学习命令的时候, 我发现了一个问题, 就是 conda deactivate 并没有退到 Python 的原生环境, 他其实还是在 conda 的环境里(其实不影响使用, 保持 base 环镜干净即可), 这不行, 得改!!!

怎么改

在我进行了一些尝试后, 发现了些有意思的事。

image.png

这是我在本地创建了一个名为 llm 的虚拟环境后, 未进入该环境之前(即处于 base 环境下)。

image.png

这是我进入了虚拟环境 llm 后。

image.png

这是我退出了 llm 环境, 回到 base 环境下。

可以发现, 其实 activate 命令就是将指定的虚拟环境路径提到 PATH 的最前边, 以达到优先使用该命令的效果。由此诞生猜想, 如果我在初始化 shell 的时候, 把原生的 Python 路径放在 PATH 的前边(即在 /usr/local/miniconda 之前), 即可达到以下效果。

  1. 正常情况下, Python 命令为原生 Python。
  2. 执行 conda activate 命令后, 虚拟环境路径提前, Python 命令为虚拟环境 Python。
  3. 执行 conda deactivate 命令后, 删除了虚拟环境路径, Python 命令仍为原生 Python。

由此即可得到 conda deactivate 退出到 Python 原生环境的目的。

验证猜想

image.png

我在 ~/.zshrc 文件的 conda 初始化后修改了 PATH, 将 Python 路径提前了。

image.png

可以看到默认的 base 环境下, 我们的 Python 命令成功执行了原生的 Python 命令。

image.png

然而执行了 conda activate 命令后, 仍是优先调用原生 Python 命令。

结论

失败!!!

结语

算是一个有趣的尝试吧, 虽然失败了, 后续还尝试着读了一些命令文件, 但是对 shell 了解不算多, 未能找到完美的解决办法, 不过仍可提供一些方案。

  1. 将 Python 原生命令改名为 Python_o(不冲突即可), 这样每次使用 Python_o 为原生 Python, 正常使用 python 为虚拟环境。
  2. 使用 alias 自定义新命令, 达到每次将虚拟环境路径提到 PATH 最前的效果。
  3. 可能能够修改 activate 源码来达到效果?

总之目前就这样吧, 也足够使用了, 如果大佬们有更好的解决方案, 希望不吝赐教!!

感谢大家, 有问题欢迎指出。