Мой проект 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_ID
(https://cmake.org/cmake/help/latest/module/FindPython3.html#result -переменные ). Однако эта переменная содержит только «Python» и поэтому ненадежна.
Изучение источников модуля Find Python CMake показывает, что он анализирует вывод python -V
.
Однако, похоже, что Anaconda пытается mimi c 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.
>>>
Итак, мой вопрос: можно ли надежно автоматически определить команду активации?