Conda环境迁移两台电脑两种方案
若仅迁移纯pip包,可额外导出requirements.txt备用即可:
pip freeze>requirements.txt方案1:yml配置文件迁移(推荐跨系统、在线可用,体积小)
适用:Windows ↔ Linux/macOS、网速好、不需要完全一模一样二进制包,只复刻依赖版本
源电脑操作
- 打开Anaconda Prompt / 终端,激活要迁移的环境
conda activate 你的环境名- 导出环境配置(–no-builds去掉平台特有构建标识,跨系统不报错)
condaenvexport--no-builds>env.yml补充:如果只想导出你手动安装的包(不包含自动依赖),用这个更干净
condaenvexport--from-history>env.yml- 把
env.yml文件拷贝到另一台电脑
目标电脑操作
- 安装好Anaconda/Miniconda,打开终端
- 进入yml所在文件夹,重建环境
condaenvcreate-fenv.yml- 验证并激活
condaenvlist conda activate 你的环境名跨系统踩坑处理
Windows导出的yml会带pywin32、win-xxx专属包,Linux/macOS装会失败:
打开env.yml,删除带pywin32、vc、win的行再执行创建命令。
方案2:conda-pack 完整打包离线迁移(同系统完美复刻,断网专用)
适用:两台系统完全一样(都是Windows 64位 / 都是Ubuntu 64)、离线无网、需要包二进制完全一致、CUDA/GPU环境迁移首选
- conda-pack:工具本体,打包虚拟环境的程序
作用:把一整个 Conda 虚拟环境(比如你那个 cv 环境)打包成一个压缩包,能拷贝到另一台 Windows/Linux 机器直接解压使用,不用重新 pip/conda 装依赖。
功能:完整打包 Python、CUDA、所有 pip/conda 安装的包、环境配置;
适用场景:离线部署、换电脑迁移深度学习环境(正好适配你 torch、torchvision 离线需求);
为什么要在 base 装:打包程序不能装在被打包的环境(cv) 里,否则打包自身时会文件占用、目录冲突(就是你之前报错 conda-bld/work 的根源),官方规范必须在 base 主环境执行打包。- -c conda-forge:指定软件源渠道
-c 参数全称 --channel,含义:从哪个软件仓库下载包
conda-forge 是什么?
是全球最大、最主流的第三方 Conda 开源软件仓库:
Anaconda 官方自带源包少,很多工具(conda-pack、ffmpeg、opencv、各类编译库)官方渠道没有;
conda-forge 维护了几十万开源工具,更新更快、版本更全;
不加 -c conda-forge 的话,conda 会去默认官方源搜,大概率找不到 conda-pack,安装失败。
源电脑
- 先在base环境安装打包工具(不要在待打包环境内执行打包)
conda activate base condainstall-cconda-forge conda-pack- 打包指定环境(生成压缩包,包含所有库文件)
# -n 指定环境名,-o 输出文件名conda pack-n你的环境名-oenv.tar.gz- 有pip可编辑安装包报错加参数:
--ignore-editable-packages
conda pack-n你的环境名 --ignore-editable-packages-oenv.tar.gz- 将
env.tar.gz传到新电脑
目标电脑
- 把压缩包解压到conda的envs目录
Windows路径示例:C:\Users\用户名\miniconda3\envs\
Linux/macOS:~/miniconda3/envs/
# Linux/macOS解压mkdir~/miniconda3/envs/myenvtar-xzfenv.tar.gz-C~/miniconda3/envs/myenvWindows:直接解压到envs下新建文件夹
- 修复环境内路径(必执行,否则激活报错)
conda-unpack 是干嘛的?
核心原理
Conda 环境里所有 exe、dll、python 脚本、编译库内部都硬编码写死了原始机器的绝对路径(比如你打包前路径:C:\Users\Administrator\miniconda3\envs\cv)。
把压缩包拷到另一台电脑、或者换个文件夹解压后,原始路径不存在,会出现:
激活环境报错
import torch/OpenCV 找不到库
脚本运行提示文件不存在
conda-pack 在打包时,会自动把修复脚本 conda-unpack.exe 塞进压缩包里;
conda-unpack 的唯一作用:批量改写环境内所有文件里写死的旧路径,替换成当前新解压的真实路径,让环境能正常使用。
不执行这一步,解压完的环境基本无法正常激活、运行代码。
打开 CMD/PowerShell,进入解压后的环境根目录
先临时激活这个刚解压好的环境
.\Scripts\activate.bat- 执行修复命令(两种写法都可以)
# 写法1:直接运行目录里的exe(最稳妥) .\Scripts\conda-unpack.exe # 写法2:激活环境后直接简写 conda-unpack conda-unpack- 激活使用
conda activate myenv两种方案对比
| 方式 | 优点 | 缺点 | 使用场景 |
|---|---|---|---|
| yml导出 | 文件很小、跨系统兼容、传输快 | 需要联网下载包,同系统无法锁定底层库 | 不同操作系统、在线环境、代码复现 |
| conda-pack | 离线可用,包完全一模一样,GPU/CUDA完整迁移 | 压缩包几十GB,只能同系统迁移 | 同系统离线服务器、本地GPU环境拷贝 |
补充小技巧
- 环境内pip安装的包yml也会记录,重建时自动pip安装;
- 打包前清理缓存缩小体积:
conda clean -a;