首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用cmake创建并激活conda环境

使用cmake创建并激活conda环境
EN

Stack Overflow用户
提问于 2022-05-31 20:44:02
回答 1查看 695关注 0票数 0

我在一个CMakeLists.txt文件中有以下内容。我试图使用cmake来检查系统上是否安装了名为myenv的conda环境,并激活了该环境。如果环境不存在,则创建环境并激活它。这假设conda已经通过蟒蛇 (或Miniconda)安装。

代码语言:javascript
复制
# Create and activate a Python environment.

cmake_minimum_required(VERSION 3.18)

# Define the project
project(MyExample)

# Specify the C++ standard
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED True)

# Make sure Python is installed
find_package(Python REQUIRED)

# Activate conda environment, assume Anaconda or Miniconda is already installed
if(EXISTS /opt/miniconda3/envs/myenv)
    execute_process(COMMAND conda activate myenv)
else()
    execute_process(COMMAND conda create --yes --quiet --name myenv python)
    execute_process(COMMAND conda activate myenv)
endif()

当我运行上面的cmake文件时,我得到了错误:

代码语言:javascript
复制
CommandNotFoundError: Your shell has not been properly configured to use 'conda activate'.

但是,conda安装在我的系统上,我可以在终端中手动激活环境。为什么不通过cmake激活环境?

EN

回答 1

Stack Overflow用户

发布于 2022-06-02 17:05:27

“为什么不通过cmake激活环境?”

第一个问题是错误消息,它表示CMake计算execute_process命令的shell不知道conda activate是什么意思。

这可能是因为conda init <shell>从未针对CMake使用的特定shell (bash?)运行过。这个答案有一些关于conda init做什么的细节。这也可能是因为定义conda activate的Conda初始化代码只加载在交互式shell中--我不希望CMake使用它。在交互式shell (bash -l -c 'conda activate foo')中可能存在强制执行的黑客方式,但这并不重要,因为.

即使上面的操作正常,这里的过程也没有意义: Conda环境的激活状态被限定为shell进程。我预计(子)外壳会随着execute_process的完成而死亡。因此,即使激活有效,它也不会在CMake脚本中继续存在。

讨论

通常,这个CMake脚本似乎不是一个好方法。在用户级别上,将代码的编译与特定命名的Conda环境的存在紧密耦合,似乎违背了CMake的精神,后者的目的是自动发现软件依赖关系,这样用户就不需要通常的硬编码位置。也许有必要重新评估正在努力实现的目标以及实现这一目标的策略。

例如,在Conda上,很多包都是用CMake编译的,但是CMake是在已经激活的环境中执行的,而它本身对Conda一无所知。这使得CMake代码完全不知道它的依赖项是如何提供的,我认为这是一种更干净的工程。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72453930

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档