Conda虚拟环境使用

背景:在云服务器通过conda的虚拟环境安装qemu的依赖环境,将环境打包迁移部署到内网

Miniconda介绍

Conda是用于管理依赖包和虚拟环境的工具(常常被用来作为Python环境管理和包管理的工具,但实际也是非常好用的C++/C包管理工具)。Anaconda是一个完整的带有Conda工具的软件包,包含了conda、python等180多个科学包及其依赖项。它主要用于科学计算和数据分析,并提供了包管理与环境管理的功能。Anaconda的安装包比较大,因为它预装了大量的科学计算工具和包。Miniconda是Anaconda的轻量版,只包含conda和Python,但没有包含Anaconda中捆绑的科学计算和数据分析用的包。

miniconda的安装与换源暂且不表。

Miniconda使用

创建并激活 Conda 虚拟环境

1
2
3
conda create -n qemu_env python=3.12

conda activate qemu_env

添加 Conda-Forge 频道

1
conda config --add channels conda-forge

conda-forge 是一个广泛使用的社区驱动的 Conda 包管理器通道(channel)。它由开源社区维护,包含了大量高质量的开源软件包和库。与官方的 Conda 通道相比,conda-forge 通道通常会包含更多的包,更新速度也更快。

安装所需要的包

1
2
3
4
5
6
7
conda search xxx 

conda install xxx
# or
conda install -c conda-forge xxx # -c 参数用于指定要安装软件包的通道(channel)
# or
pip install xxx

查看已安装的包(库)版本

1
2
3
4
5
6
7
ninja --version
> 1.10.2

pkg-config --modversion glib-2.0
> 2.78.0
#or
ls $CONDA_PREFIX/lib

[!CAUTION]

要确保安装的目录在虚拟环境下

1
2
3
4
5
6
which pkg-config
> /root/miniconda3/envs/qemu_env/bin/pkg-config
which pip
> /root/miniconda3/envs/qemu_env/bin/pip

export PATH=$CONDA_PREFIX/bin:$PATH

按照以上步骤安装的软件包或者库文件会安装在当前虚拟环境下。(确认是否进入创建的虚拟环境,而不是base环境)

虚拟环境打包及迁移

以下介绍仅适用于==同系统下==虚拟环境迁移,不同系统之间迁移情况会略有不同。

打包虚拟环境

定位虚拟环境路径

1
conda info --envs

打包虚拟环境目录

image-20240830172801823

1
tar -czvf qemu_env.tar.gz -C /path/to/conda/envs/qemu_env ./

生成一个包含虚拟环境的压缩文件 qemu_env.tar.gz

迁移虚拟环境

内网服务器上解压并导入打包好的 Conda 环境

1
tar -xzvf qemu_env.tar.gz -C /path/to/conda/envs/qemu_env

[!NOTE]

需要提前在内网服务器安装好Miniconda,但是不需要提前创建新的虚拟环境

激活环境

1
conda activate qemu_env

验证环境完整性

在服务器上激活环境后,确保所有包和依赖都存在

1
conda list

[!IMPORTANT]

文件权限: 确保迁移后的文件拥有正确的权限,特别是在不同用户之间迁移时,可能需要修改文件权限以确保虚拟环境能够正常使用。

外部依赖: 如果虚拟环境中依赖系统库,需要确认这些库在当前服务器上也已安装。

解决版本冲突

可能迁移成功后虚拟环境中有的包的版本与外部包的版本不一致,而当前所使用的包指向的是外部的包。这个问题通常与环境变量的优先级、路径设置以及多个版本的库共存有关。

e.g. 在 Conda 环境中安装了 glib-2.78.0,但是 pkg-config 仍然指向系统的 glib-2.56.4,则可能是因为环境变量或路径配置导致了这个冲突。

确认 pkg-config 使用的是 Conda 环境的版本

  • **激活虚拟环境:**确保 Conda 虚拟环境 qemu_env 已激活
  • 检查 pkg-config 的路径: 确保当前的 pkg-config 来自 Conda 环境
  • 验证 pkg-config 中的包版本

确保 Conda 环境中的 pkg-config 优先级

1
export PATH=$CONDA_PREFIX/bin:$PATH

设置链接库优先级

在某些应用程序编译过程中,可能仍然会链接到系统的glib,此时可以检查链接器的配置。确保编译过程中使用的 LD_LIBRARY_PATH 和链接器标志指向 Conda 环境中的库文件。

1
export LD_LIBRARY_PATH=$CONDA_PREFIX/lib:$LD_LIBRARY_PATH

以上为Conda虚拟环境的简单使用


Conda虚拟环境使用
http://willimt.com/2024/09/01/Conda虚拟环境使用/
作者
Willimt
发布于
2024年9月1日
许可协议