Anaconda虚拟环境迁移

想要在其他电脑上复现自己电脑上的项目,环境配置是前期绕不开的门槛。要知道,复杂一些的项目环境配置一旦出了问题,解决个三五天是常有的事情。当你好不容易在本地电脑跑通了一切,你的导师却让你迁移项目(@_@;)……Anaconda虚拟环境的导入/导出直击痛点,解决“我的电脑能跑,你的电脑不能跑”的环境问题。

一、前言

笔者使用Anaconda虚拟环境的操作可能不够规范,通常会优先使用conda install下载软件包,但如果遇到conda install命令下载出问题的包,会习惯性的用pip install命令尝试再下载一遍。这导致虚拟环境中的软件包即有conda命令下载的,也有pip命令下载的。这为虚拟环境的迁移制造了困难。所以,以下的虚拟环境导出涉及两个部分,需要分别导出conda和pip安装的包列表及其对应版本。

二、conda虚拟环境导出

1.快速导出包列表

若仅需记录环境基础信息,或快速迁移核心依赖包,推荐使用包列表导出方式。该方法仅保存包名与对应版本号,文件体积小,查看便捷执行以下命令即可完成导出:

conda list --export > requirements.txt

--explicit显式列出所有已安装的带有 URL 的 conda 包(输出可供 conda create –file 使用)。

一直把conda list命令拿来查看环境内软件包,没想到这条命令承担起了包管理的功能。命令执行后,当前环境中所有已安装包的名称和版本号会自动保存到requirements.txt文件中,可直接用于快速迁移或环境记录。

需要注意的是,conda list --export 命令主要用于导出通过 conda 安装 的包。虽然它会在列表中显示 pip 安装的包,但在导出的 requirements.txt 文件中,pip 安装的包通常不会被正确标记或处理。

2.完整导出环境配置(推荐)

若需在不同设备上完全复制环境(包括包、版本号、环境变量等所有配置),确保运行环境完全一致,需使用完整环境配置导出方式。执行以下命令导出完整配置:

conda env export > environment.yaml

生成的environnent.yaml 文件是核心配置文件,详细记录了环境名称、依赖包及版本、通道信息等关键内容,同时它会将 conda 和 pip 的包分开记录,便于在其他机器上重建完全一致的环境,是跨设备完整迁移的最佳选择。

三、conda虚拟环境导入

1.导入conda list –export导出的文件

conda create --name myenv --file requirements.txt

其中,myenv为新环境的名字。用这条命令可以在联网环境下,自动下载requirements.txt文件中的软件包。

2.导入conda env export导出的文件(推荐)

在目标电脑上打开终端,通过cd命令导航到配置文件所在目录,然后执行以下命令:

conda env create -f environment.yaml

环境创建完成后,需通过以下命令激活环境:

conda activate 环境名

注意:环境名可在environment.yaml文件顶部的name:环境名字段中查看,需确保命令中的环境名与配置文件一致。

四、导入/导出pip install安装的包

可以使用以下命令将当前环境中的所有包及其版本导出到一个文件中:

pip freeze > requirements.txt

在新环境中安装这些包,可以使用以下命令:

pip install -r requirements.txt

在安装过程中,如果遇到依赖冲突,可以使用工具如 pipdeptree 来检查和解决依赖问题。

五、离线环境下的环境迁移

以上方法可行的前提条件,是新机器上是联网环境,可以正常下载。如果新环境没有网络,需要用其他方法。当然,你需要在有网的环境下配置好环境,然后再迁移到没网的环境。

使用conda pack工具可以将 Conda 环境打包为一个压缩文件,方便在其他机器上解压和使用。打包后的环境通常会放置在目标机器的指定目录下。

第一步先下载conda pack工具。

pip install conda-pack

第二步,打包旧环境,打包后的环境是一个名为oldEnv.tra.gz的压缩包。oldEnv这个压缩包名字可以随意命名,建议和旧环境名叫一样的名字。

conda pack -n oldEnv

第三步,在新机器上的anaconda3文件夹下的env文件夹内(若修改过anaconda虚拟环境的默认存储路径,则需要在你自定义的环境存储路径下进行),创建一个和旧环境命名一样的文件夹

mkdir oldEnv

第四步,解压到刚刚创建的文件夹下。

tar -xzvf oldEnv.tar.gz -C /home/username/anaconda3/envs/oldEnv

至此,离线环境下的环境迁移结束,不出意外的话,可以通过conda env list命令,查看到刚刚新迁移过来的环境。

碎碎念

1.conda list --export、pip freeze生成的requirements.txt文件主要面向纯Pip的包管理场景。这个文件只关心包的名称和版本号,不包含构建信息,也完全忽略了包的来源(是来自Conda仓库还是PyPI)。当环境混合了Conda和Pip安装 的包时,直接使用这两个命令生成的requirements.txt在另一个纯Pip环境中重建,极有可能失败。推荐直接使用conda env export导出环境,或离线方案。

2.若存在跨系统的环境迁移(如Windows到Linux、macOS),需手动调整environment.yml中的相关包版本或通道配置。

参考资料

Conda虚拟环境迁移指南导出依赖库并跨设备重建环境_conda 导出虚拟环境-CSDN博客

linux环境下,导出conda和pip的安装包和对应版本_conda 导出安装包-CSDN博客

【保姆级教程】Anaconda环境迁移:直接将之前搭建好的环境从一个机子迁移到另一个机子-CSDN博客

使用conda pack进行环境迁移(步骤很详细)-CSDN博客

避坑指南:Anaconda环境导出常见错误及解决方案(含yml/req.txt文件修复)-CSDN博客

Conda 25.1.1文档-Conda包管理器

上一篇
下一篇