CMake: автоматически определить команду для активации виртуальной среды python - PullRequest
0 голосов
/ 04 августа 2020

Мой проект 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.
>>>

Итак, мой вопрос: можно ли надежно автоматически определить команду активации?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...