使用

在 Conda 环境中编译安装 C++ 项目

编译时记得加这两个参数:

cmake ..  -DCMAKE_INSTALL_PREFIX="$CONDA_PREFIX" -DCMAKE_PREFIX_PATH="$CONDA_PREFIX"

则 cmake 在查找依赖时会优先从当前激活的 conda 环境中找;编译好后安装到当前 conda 环境,供其他项目链接或调用中。

🌟 为什么优先使用 conda-forge

conda-forge 的优势

  1. 社区驱动

    • 开源社区维护,无商业许可限制
    • 更新更及时,包版本更新
    • 包质量更高,依赖关系更完善
  2. 更广泛的包支持

    • 包含更多科学计算和数据科学包
    • 许多包只在 conda-forge 中可用
    • 编译选项更优化
  3. 避免法律问题

    • 不受 Anaconda 商业许可限制
    • 适合商业使用
    • 无警告信息干扰

更新 conda 环境

在开发过程中,你可能需要在 conda 环境和 envs/environment.yaml 文件之间保持同步。以下是两种常见场景的处理方法:

场景 1:将新安装的包同步到 environment.yaml

当你使用 conda installpip install 安装了新包后,需要将这些变更同步到 envs/environment.yaml 文件中:

方法一:导出完整环境(推荐)

# 激活 umi 环境
conda activate umi
 
# 导出当前环境(包含依赖)到 environment.yaml, 用于精确复现
conda env export > envs/environment.yaml
 
# 仅导出手动安装的包(不包括依赖)
conda env export --from-history > > envs/environment.yaml

方法二:手动更新 environment.yaml

# 查看已安装的包
conda list
 
# 手动编辑 envs/environment.yaml,添加新安装的包
# 格式示例:
# dependencies:
#   - numpy=1.24.0
#   - requests=2.28.0
#   - pip:
#     - some-pip-package==1.0.0

注意事项:

  • 方法一会导出所有包(包括依赖),文件较大但更准确
  • 方法二需要手动维护,但文件更简洁,只包含明确需要的包
  • 建议在提交代码前清理 environment.yaml,只保留项目必需的包

场景 2:将 environment.yaml 的更改同步到 conda 环境

当你更新了 envs/environment.yaml 文件后,需要将变更应用到现有的 conda 环境:

更新现有环境

# 激活 umi 环境
conda activate umi
 
# 根据 environment.yaml 更新环境
conda env update -f envs/environment.yaml --prune

重新创建环境(彻底更新)

# 删除现有环境
conda env remove -n umi
 
# 基于 environment.yaml 重新创建环境
conda env create -f envs/environment.yaml

参数说明:

  • --prune:删除 environment.yaml 中未列出的包
  • -f:指定环境文件路径

常用 conda/mamba 命令速查

# 环境管理
mamba create -n myenv python=3.9            # 创建环境
mamba create -n myenv --clone base          # 克隆环境
conda activate myenv                        # 激活环境(mamba 一般使用 conda 来激活)
conda deactivate                            # 退出环境
mamba env list                              # 列出所有环境
mamba remove -n myenv                       # 删除环境
mamba env export > environment.yml          # 导出完整环境
mamba env export --from-history > environment-min.yml  # 仅导出显式安装的包
mamba env create -f environment.yml         # 从文件创建环境
 
# 环境更新
mamba update -n myenv --all                 # 更新指定环境中所有包
mamba env update -n myenv -f environment.yml          # 按文件更新环境
mamba env update -n myenv -f environment.yml --prune  # 同步并移除文件中未列出的包
mamba list --revisions                      # 查看当前环境的修订历史
mamba install --revision 3                  # 回滚到修订版本 3
 
# 包管理
mamba install numpy pandas                  # 安装包
mamba install -c conda-forge scipy          # 从指定频道安装
mamba update numpy                          # 更新单个包
mamba remove numpy                          # 卸载包
mamba list                                  # 列出已安装包
mamba search numpy                          # 搜索包
mamba info numpy                            # 查看包信息(版本、构建、依赖等)
 
# 依赖与关系查询(repoquery)
mamba repoquery depends numpy               # 查看 numpy 的依赖
mamba repoquery depends --tree numpy        # 依赖树视图
mamba repoquery whoneeds numpy              # 哪些包依赖 numpy(反向依赖)
mamba repoquery depends --installed numpy   # 在当前已安装环境里看依赖
mamba repoquery whoneeds --installed numpy  # 在当前已安装环境里看反向依赖
 
# 频道管理
mamba config --add channels conda-forge     # 添加频道
mamba config --show channels                # 查看频道列表
mamba config --remove channels conda-forge  # 移除频道
mamba config --set channel_priority strict  # 设置频道优先级为严格
 
# 缓存和清理
mamba clean --all                           # 清理索引、包、tar 等所有缓存
mamba clean -p                              # 清理包缓存
mamba clean -t                              # 清理 tar 包
 

Q&A

mamba 安装的 numpy 和 在 mamba 激活的环境中 pip 安装的 numpy 版本不一样会怎么样