Skip to content
Table of contents

Conda 使用

3 min read ··· views #conda

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

Miniconda 介绍

Conda 是用于管理依赖包和虚拟环境的工具,常被用作 Python 环境与包管理工具,实际上它也是非常优秀的 C/C++ 包管理工具。Anaconda 是一个内置 Conda 的完整发行版,包含 conda、python 等 180 多个科学包及其依赖项,主要用于科学计算和数据分析,并提供包管理与环境管理功能。Anaconda 安装包较大,因为它预装了大量的科学计算工具和包。Miniconda 是 Anaconda 的轻量版,只包含 conda 和 Python,不含 Anaconda 捆绑的科学计算与数据分析包。

Miniconda 的安装与换源这里暂且不表。

Miniconda 使用

创建并激活 Conda 虚拟环境

conda create -n qemu_env python=3.12
conda activate qemu_env
bash

添加 Conda-Forge 频道

conda config --add channels conda-forge
bash

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

安装所需要的包

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

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

ninja --version
> 1.10.2
pkg-config --modversion glib-2.0
> 2.78.0
# or
ls $CONDA_PREFIX/lib
bash

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

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
bash

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

虚拟环境打包及迁移

以下方法仅适用于同系统下的虚拟环境迁移,跨系统的迁移会略有不同。

打包虚拟环境

定位虚拟环境路径:

conda info --envs
plaintext

打包虚拟环境目录:

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

命令会生成包含虚拟环境的压缩文件 qemu_env.tar.gz

迁移虚拟环境

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

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

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

激活环境:

conda activate qemu_env
bash

验证环境完整性

在服务器上激活环境后,确认所有包和依赖都完整:

conda list
bash

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

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

解决版本冲突

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

例如,在 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 优先级

export PATH=$CONDA_PREFIX/bin:$PATH
bash

设置链接库优先级

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

export LD_LIBRARY_PATH=$CONDA_PREFIX/lib:$LD_LIBRARY_PATH
bash

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