Conda 虚拟环境打包迁移简记

发表于 1 天前  3 次阅读


文章目录

Conda 环境的迁移和复现是日常运维中的高频需求。本文整理三种主流迁移方式及离线部署方案,覆盖同平台、跨平台、断网等场景。

一、conda-pack 打包迁移(同平台)

conda-pack 将整个 Conda 环境(含二进制文件)打包成压缩包,适合相同 OS / 架构的机器间迁移。最大优势:目标机器无需联网

1.1 安装 conda-pack

conda-pack 需单独安装,二选一即可:

conda install -c conda-forge conda-pack
pip install conda-pack

国内加速:

pip install conda-pack -i https://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com

1.2 打包环境

conda pack -n my_env -o my_env.tar.gz

-n 指定环境名,-o 指定输出文件名。也可按路径打包:

conda pack -p /path/to/my_env -o my_env.tar.gz

1.3 迁移到目标机器

# 1. 将 tar.gz 拷贝到目标机器(U盘 / scp / rsync 均可)
scp my_env.tar.gz user@target:/tmp/

# 2. 在目标机器解压到 conda envs 目录
mkdir -p ~/miniconda3/envs/my_env
tar -xzvf /tmp/my_env.tar.gz -C ~/miniconda3/envs/my_env

# 3. 激活验证
conda env list
conda activate my_env

解压后环境即开即用,无需再次 conda install

二、spec-list 文件迁移(同平台)

适用于仅需复现包列表、不需要完整二进制的场景。本质是导出精确版本号再批量安装。

# 源机器导出
conda list --explicit > spec-list.txt

# 目标机器导入
conda create -n my_env --file spec-list.txt

这种方式依赖网络(目标机器需联网下载包),但生成的文件体积极小,适合版本管控。

三、environment.yml 跨平台迁移

当源和目标 OS / 架构不同时,使用 YAML 描述文件重新安装是最可靠的方式。

# 源机器导出(会包含 pip 依赖)
conda env export > environment.yml

# 目标机器重建
conda env create -f environment.yml

注:environment.yml 导出的是完整依赖树,可能包含平台特定包。跨平台时建议手动精简关键依赖,或使用 --from-history 仅导出显式安装的包:

conda env export --from-history > environment.yml

四、离线安装方案

断网机器上安装 Conda 和创建环境,核心思路是"有网预下载,离线用缓存"。

4.1 安装 Miniconda(离线)

先在有网机器下载安装脚本,再传到目标机器:

# 下载对应架构的安装包
wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-latest-Linux-x86_64.sh

# 离线安装(-b 静默,-p 指定路径)
bash Miniconda3-latest-Linux-x86_64.sh -b -p ~/miniconda3
source ~/miniconda3/bin/activate

4.2 预下载依赖包

在有网机器上下载所需 Python 版本的所有依赖:

# 方式一:基于 environment.yml
conda env create -f environment.yml --download-only

# 方式二:创建临时环境仅下载
conda create -n temp_env python=3.10 --download-only -d ~/conda_offline_pkgs

# 打包
tar -zcvf conda_offline_pkgs.tar.gz ~/conda_offline_pkgs

4.3 离线创建环境

conda_offline_pkgs.tar.gzenvironment.yml 传到目标机器:

tar -zxvf conda_offline_pkgs.tar.gz -C ~/
conda config --add pkgs_dirs ~/conda_offline_pkgs
conda env create -f environment.yml --offline

五、三种方式对比

方式适用场景核心特点依赖网络
conda-pack同平台迁移首选打包二进制,一步解压即用❌ 不需要
spec-list同平台轻量分发导出版本号列表,体积小✅ 需要
environment.yml跨平台唯一可靠方案导出 YAML 重建,兼容性最好✅ 需要

六、实操要点

  • conda-pack 打包后源环境不变,放心操作。
  • 如果解压后 conda activate 报错,先在目标机器执行 conda init 初始化 shell。
  • 打包前建议 conda clean -a 清理缓存,减小压缩包体积。
  • 跨平台迁移时注意 packages 中的平台特定包(如 mklcuda-toolkit),必要时手动剔除。
  • arm64(M1/M2 Mac)和 x86_64 之间迁移必须使用 environment.yml 方式。

简记。

本站文章基于国际协议BY-NA-SA 4.0协议共享;
如未特殊说明,本站文章皆为原创文章,请规范转载。

0

scanz个人博客