python实用教程(十二):python3的开发环境打包迁移(离线和在线) python3开发环境的高效快速打包迁移(离线和在线)

一、背景

到一个全新的计算机上部署环境我相信是很多Python猿头疼的事情,软件安装只是第一步,往往因为少了各种依赖跑不起来,真可谓是“配置是马拉松,跑程序则是百米冲刺”。有网还好,一个个pip安装,但也会碰到各种版本冲突,大部分新手也难做决断。然而很多时候出于安全考虑,企业提供的计算机环境是离线的,无法联网下载需要的软件或依赖包,就需要我们提前下载好相关软件以及依赖包,然后将整个环境打包迁移到新的离线服务器上,保证程序能够正常运行。

对于离线环境,无疑就一种方法:整体打包并迁移;对于在线环境则有两种方式,第一就是环境环境配置信息打包,然后在新的环境下联网一键创建;第二就是依赖包信息打包,然后在新的环境下联网一键批量安装。下面就将三种方法一一介绍并给出操作明细。

二、离线环境(导出完整环境文件包tar.gz)

打包前我们可以先在windows下安装虚拟Linux环境来构造环境,然后把自己的程序放在虚拟环境中运行,程序能够准确无误地运行之后再用打包工具打包整个虚拟环境。具体操作流程如下:

1、打包工具conda-pack安装:

conda install conda-pack

执行完命令后点击y就行,等待安装完成即可。

2、创建虚拟环境(这里假设名称为:dataAnalysis):

conda create -n dataAnalysis

conda activate dataAnalysis

可以看到激活后命令行最前面就变成dataAnalysis了。

3、在该环境下执行主程序,激活后在该环境下运行程序,并根据程序要求批量安装必要的依赖包,直到项目程序能够完整执行并输出准确结果:

python3 main.py    #出现任何问题则需要debug,确保运行结果准确无误后再进行第4步

4、打包环境:

conda pack -n dataAnalysis -o dataAnalysis.tar.gz --ignore-editable-packages

其中ignore是为了忽略无关紧要的异常

5、环境迁移:

将打包好的环境文件拷贝到新的离线服务器上,然后进入到anaconda3/envs文件夹下并解压打包好的环境(anaconda安装配置流程见:https://blog.csdn.net/Trisyp/article/details/144216529

):

cd anaconda3/envs/    # 进入到anaconda环境列表 文件夹下

mkdir -p dataAnalysis    # 新建环境文件夹,文件夹名称是你的环境名

mv dataAnalysis.tar.gz /anaconda3/envs/dataAnalysis/    # 将文件拷贝到环境文件夹下

cd /anaconda3/envs/dataAnalysis/    # 进入到环境文件夹下

tar -zxf dataAnalysis.tar.gz    # 解压

conda activate dataAnalysis    # 激活环境

6、运行程序:

python3 main.py    # 确保运行结果准确无误

-----------------------------------------------------------------------------

优点:

①可以离线使用:生成的 .tar.gz 文件可以直接在无网络环境中解压后使用。

②部署快速简便:解压后即可使用,不需要其他繁琐配置(比如下载依赖包)。

③完全封装:打包后的文件包含所有包和依赖的完整版本,不会因依赖包版本变化而导致环境不一致。

缺点:

①文件体积大:包含了所有依赖包,打包后的 .tar.gz 文件可能非常大(通常几百 MB 到几 GB)。

②平台依赖性:由于打包文件包含具体的二进制文件,不同操作系统之间可能无法直接复用。

③维护难度:打包环境需要频繁更新以保持与源环境同步,尤其在包更新频繁的项目中。

三、在线环境(导出YAML配置文件)

如果新的计算机环境能够联网还是建议用配置信息重构这种方法,先将当前环境(项目准确运行)的依赖列表导出为.yaml 文件,然后在其他机器上按照配置信息重建环境。步骤如下:

1、当前环境下激活并导出conda环境:

conda activate dataAnalysis 
conda env export > dataAnalysis.yaml 

2、在新的环境或其他机器上重建环境:

conda env create -f dataAnalysis.yaml -n dataAnalysis

3、激活验证是否安装成功:

conda activate dataAnalysis

4、运行程序验证能够成功跑通项目:

python3 main.py    # 确保运行结果准确无误

-----------------------------------------------------------------------------

优点:

①可重现性强:通过 YAML 文件可以清晰列出所有包的名称、版本和来源,方便在其他机器上重建相同环境。

②体积小:YAML 文件通常只有几 KB,非常便于传输和存储。

③跨平台性好:适用于不同平台的重建,只要安装了 Conda,就能通过文件重建环境。

④易于版本控制:YAML 文件可以通过 Git 等工具进行管理和版本控制。

缺点:

①依赖下载慢:新环境需要重新从网络下载所有依赖包,可能较耗时。(配置清华源见:https://blog.csdn.net/Trisyp/article/details/144216529

②网络依赖:如果环境中的包来源于外部(如 Conda Forge 或 PyPI),需要保证目标机器能访问这些源。

③平台兼容性问题:某些包可能在不同系统(Windows、Linux、macOS)下表现不一致。

四、在线环境(导出依赖列表文件requirements)

如果新的计算机环境能够联网还有一种方式就是导出环境依赖信息,先将当前环境(项目准确运行)的依赖列表导出为requirements.txt文件,然后在其他机器上一键安装依赖列表。步骤如下:

1、安装pip工具:

apt install python3-pip

2、导出依赖列表:

pip freeze > requirements.txt

导出后可以在当前文件夹下看到txt文件

3、在新的环境下或其他机器上批量安装依赖:

pip install -r requirements.txt  


# 确保依赖包都安装成功 

4、可以查看依赖列表看是否安装成功:

pip list

5、运行程序验证能够成功跑通项目:

python3 main.py    # 确保运行结果准确无误

-----------------------------------------------------------------------------

缺点就是经常会由于网路或各种版本冲突问题而导致安装失败,然后手动一个个安装的话非常麻烦。

-----------------------------------------------------------------------------

error-ps1、环境名已存在:

如果迁移过程中环境(假如环境名称为dataAnalysis)出问题了想删除可以用conda env remove --name dataAnalysis命令

error-ps2、pip版本不一致问题:

如果在线迁移过程中出现包安装不成功导致CondaEnvException:Pip failed。

可以根据错误提示使用正确的pip版本,然后用上述的四、导出依赖列表方式继续安装依赖。操作如下:

error-ps3、环境激活无效问题:

如果在线迁移过程中出现环境激活后无效问题,可以考虑使用 source 激活而不是 conda activate 来激活环境:

source /root/anaconda3/envs/dataAnalysis/bin/activate

作者:Trisyp原文地址:https://blog.csdn.net/Trisyp/article/details/144231186

%s 个评论

要回复文章请先登录注册