干货满满 |“Conda”——多版本软件包环境安装、管理和部署工具经验分享

Conda是一个开源的软件包管理系统和环境管理器,用于在单个机器上对多个语言的包进行安装、管理和部署。小编在这里将简单介绍Conda工具,包含一些常用的命令、部署方案等内容,希望能够给读者提供帮助。

什么是Conda 

Conda 是一个开源的使用Python语言编写的软件包管理系统和环境管理系统,核心功能用于安装和处理多个版本的软件包及其依赖关系,能够创建一些虚拟的环境并能够在多个版本中来回切换

Conda的包管理功能与Python中的pip相似,但是与pip的最主要的区别是,pip只能在任意操作系统中对Python语言的安装包进行管理,而Conda是在任意操作系统中对任意语言的安装包进行管理。

对软件包的管理,可以划分为以下四点:

➤1.生成可以部署的在线安装包:将源码或编译后的工程通过修改配置文件及构建脚本生成能够完成部署的安装包。

➤2.生成离线安装包:通过已有的在线安装包中提取项目的安装信息和依赖信息,生成一个能够供相应操作系统使用的离线安装包(可执行文件)。

➤3.生成其他项目的依赖:将源码或编译后的工程通过修改配置文件及构建脚本能够生成项目所需要的依赖包。

➤4.包的版本管理:能够将各个不同版本的安装包或依赖管理起来,为不同版本的安装部署带来便利。例如FastCAE中使用不同版本的VTK、OCC时,可以利用版本管理寻找不同版本相应的依赖包。

Conda的环境管理是Conda的另一项核心功能。Conda的环境管理主要是使用Conda创建虚拟的部署环境来对Conda的包或依赖进行测试。

每个虚环境相对比较独立,有自己独立的用户名和系统环境变量,修改虚环境的相关信息不会影响系统的主环境的内容。这样很好的解决了系统中安装多版本的软件或依赖库的问题。

如Python的2.x和3.x可以通过虚环境来安装不同的版本,以达到同一台电脑安装多个版本的Python,并且相互之间不受影响的目的。

部署 

目前Conda的安装包主要有两种:Miniconda和Anconda。

◉ Anconda是一个开源的Python发行版本,包含了Conda、Python等180多个科学包及其依赖项。

◉Miniconda是最小的conda安装环境,相当于conda+python+pip,Miniconda是个轻量级的Conda安装包,包内只有Conda相关的安装包。下载地址为https://docs.conda.io/en/latest/miniconda.html#

干货满满 |“Conda”——多版本软件包环境安装、管理和部署工具经验分享_第1张图片

两种安装包的主要区别是Anconda是一种Python的发行版,比Miniconda多了许多其他的依赖安装包,如numpy等常用的科学计算工具以及界面工具,因此Anconda更适合新手使用,并且这些依赖包都是提供给Python使用的,根据不同的实际使用情况,可以选择不同的Conda安装包进行安装。

用户可以根据自己当前的操作系统及所想使用的Python版本选择相应的安装包。

在Centos系统中,Miniconda的安装过程比较简单,只需要设置与Python相关的环境变量,直接运行相应的安装文件即可,安装到最后会提示“是否写入系统环境变量文件.bashrc”,推荐选择写入文件中。若不放入环境变量,每次重新开机需要重新把Conda的环境信息放到临时的环境变量中,较麻烦。

Miniconda安装之后,在终端中输入conda config命令,则会在用户的home目录下会生成一个.condarc的文件,.condarc文件是Conda在运行时的配置文件,用户可以在.condarc文件中配置本地源目录、局域网服务器源或者外网的Conda公开的源。同时.condarc文件中也记录了虚环境数据目录及包管理的时候包的数据保存位置等信息。

使用 

主要有使用命令和虚环境命令两种:

常用的使用命令:

conda install pkg(=version) 安装相关的包(指定版本)

conda uninstall pkg(=version) 卸载对应的安装包(指定版本)

conda list 查看当前主机的安装包列表

conda search pkg 查找相关包文件

conda index path 将path目录下的包序列化到conda中

conda build path 将path目录下的文件 通过build脚本构建成相应的包

conda info pkg(=version) 查看包的依赖(指定版本)

constructor path 将path下的constructor目录下的配置文件内指定的pkg包打包成可以在系统内安装的安装包,以供离线部署。

常用的虚环境命令:

conda create -n name (python=verion) 以创建固定用户名(在虚环境目录中)的虚环境(指定python版本)

conda create -p path (python=verion) 创建在path目录下的虚环境(指定python版本)

conda remove -n(p) name(path) 按照虚环境的名字(或目录)删除相应的虚环境

source activate name(path) 进入相应名字的虚环境

source deactivated 退出虚环境

conda env list 查看虚环境的列表

集成平台的部署方案 

以下为在集成平台中的一个部署方案,自己的总结经验。

使用Conda可以使用一些命令或者配置脚本,将代码转换成Conda服务器上的规范格式包,配置文件中包含了包的名称、包的依赖、放置的源的位置以及查找源的位置。若使用代码进行打包时,脚本中会存有环境变量配置、如何编译以及如何安装,如果存在依赖,依赖需要安装到哪个相应的目录下等内容。

以Qt为例,若将Qt打成一个包,会有OpenGL相关的库作为依赖,需要将OpenGL相关的依赖加入到Conda服务器上,Qt会自动找到OpenGL相关的库,自己也会形成一个依赖包,提供给其他的Qt程序打包时使用。打完包后可以通过将包输出成离线的可执行二进制文件,再将其传输给其他相同的环境的电脑进行安装。安装后基本不会存在缺少库的问题。且打包过程中也会存在一个简单的自动化测试,用于检测是否缺少必要内容等。

因集成平台的特殊性,包括local模式等,若干种模式下安装包应该是不一样的,根据各种情况下,通过写不同的配置文件,写出不同的配置依赖,可以生成不同的安装包。

客户端主要使用了Qt来编写,并且使用了Protobuf、FTP、VTK、OCC、CGNS、HDF5等外部库。需要先将依赖库及依赖库的依赖使用Conda的命令上传到服务器中,当所有的依赖库和Qt都上传到Conda服务器上时,即可进行客户端的打包上传了。

部署时可能会遇到缺少库的情况,使用conda可以避免缺少库或者依赖的问题。

干货满满 |“Conda”——多版本软件包环境安装、管理和部署工具经验分享_第2张图片

服务端主要使用原生的C++来开发的,并且使用了Protobuf、Boost、Ftp等外部库。需要先将依赖库及依赖库的依赖使用Conda的命令上传到服务器中,当所有的依赖库都上传到Conda服务器上时,即可进行服务端的打包上传了,其基础思路与客户端类似。

干货满满 |“Conda”——多版本软件包环境安装、管理和部署工具经验分享_第3张图片

使用conda,用户可以轻松地安装、更新和删除软件包,并管理不同版本之间的切换,从而极大地简化了开发和部署过程。

以上就是在集成过程中,对于Conda的理解和使用经验,感谢您抽出宝贵的时间阅读本文章,并且希望您从中获得了有价值的信息与启发。

你可能感兴趣的:(conda,python,ubuntu)