CMake:自动找出命令以激活python虚拟环境

时间:2020-08-04 09:29:36

标签: python cmake virtualenv

我的CMake项目添加了一些自定义命令,运行python脚本,像这样

add_custom_target(custom_target
                  COMMAND ${Python3_EXECUTABLE} script.py
)

大多数情况下,python解释器都是从虚拟环境启动的。 Python脚本会导入numpy,最好在启动它们之前先激活该环境:source /path/bin/activate && python ./script.py

但是,我和一些团队成员都在Windows上工作。通常,我们从“开始”菜单启动CMake-gui。因此,它没有激活python环境。因此,最好将virtualenv激活放在自定义命令中,如下所示:

add_custom_target(custom_target
                  COMMAND source /path/to/venv/bin/activate && ${Python3_EXECUTABLE} script.py
)

或Windows

add_custom_target(custom_target
                  COMMAND c:\Anaconda\condabin\conda activate py37 && ${Python3_EXECUTABLE} script.py
)

由于我们拥有Anaconda和CPython,因此至少有两种虚拟环境激活命令:conda activate venv/path/to/venv/bin/activate

我尝试解析Python3_INTERPRETER_IDhttps://cmake.org/cmake/help/latest/module/FindPython3.html#result-variables)。但是,此变量仅包含“ Python”,因此不可靠。

研究FindPython CMake模块的源代码表明它解析了python -V的输出。

但是,似乎Anaconda试图模仿CPython:

(py37) C:\work>python -V
Python 3.7.7

(py37) C:\work>python
Python 3.7.7 (default, May  6 2020, 11:45:54) [MSC v.1916 64 bit (AMD64)] :: Anaconda, Inc. on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>

所以,我的问题是:是否可以可靠地自动找出激活命令?

0 个答案:

没有答案
相关问题