2015-06-12 14 views
7

Chciałbym dla mojego projektu, który jest budowany z porcjami w cmake - aby cmake skonfigurować virtualenv dla mojego kodu Pythona.CMake - konfigurowanie python virtualenv

Czy to zwykle się dzieje, czy powinienem założyć, że moje środowisko pythonowe będzie globalne?

+3

To Gist https://gist.github.com/mjkillough/630ef274387429680577963f630b2691 demonstruje "Generowanie i używanie virtualenv z CMake". – drizzd

Odpowiedz

0

prowadzi link istota działa

cmake_minimum_required(VERSION 3.6) 

project(CmakeVirtualenv) 

enable_testing() 

# Find Python and Virtualenv. We don't actually use the output of the 
# find_package, but it'll give nicer errors. 
find_package(PythonInterp 2.7 REQUIRED) 
find_program(VIRTUALENV virtualenv) 
if(NOT VIRTUALENV) 
    message(FATAL_ERROR "Could not find `virtualenv` in PATH") 
endif() 
set(VIRTUALENV ${VIRTUALENV} -p python2.7) 

# Generate the virtualenv and ensure it's up to date. 
add_custom_command(
    OUTPUT venv 
    COMMAND ${VIRTUALENV} venv 
) 
add_custom_command(
    OUTPUT venv.stamp 
    DEPENDS venv requirements.txt 
    COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/requirements.txt requirements.txt 
    COMMAND ./venv/bin/pip install -r requirements.txt --upgrade 
) 

# Build command line to run py.test. 
set(PYTEST 
    ${CMAKE_CURRENT_BINARY_DIR}/venv/bin/python2 
    ${CMAKE_CURRENT_BINARY_DIR}/venv/bin/py.test 
) 


add_custom_target(Tests ALL 
    DEPENDS venv.stamp 
    SOURCES requirements.txt 
) 

add_test(NAME run_tests 
    COMMAND ${PYTEST} ${CMAKE_CURRENT_SOURCE_DIR}/test_sample.py 
) 

Zauważ, że może trzeba użyć ${CMAKE_CURRENT_BINARY_PATH/venv} lub podobny, jeśli używasz WORKING_DIRECTORY zastąpić bieżący katalog roboczy.

+0

Zamiast twardego kodowania pythonversion w 'set (VIRTUALENV ...)' można użyć zmiennej '$ {PYTHON_EXECUTABLE}', która jest zdefiniowana przez 'find_package (...', aby była spójna.Należy prawdopodobnie również wywołać '$ { PYTHON_EXECUTABLE} -m virtualenv', aby upewnić się, że wywoła się poprawny.Ten skrypt cmake ma również problem, który nie działa w systemie Windows, ale nie widzę schludny sposób, aby naprawić ten atm. – NOhs