2015-06-12 11 views
7

Vorrei il mio progetto che è stato costruito con porzioni in cmake - per fare in modo che cmake configuri virtualenv per il mio codice python.CMake - impostazione python virtualenv

Questo di solito è fatto o dovrei solo presumere che il mio ambiente python sarà globale?

+3

Questo Gist https://gist.github.com/mjkillough/630ef274387429680577963f630b2691 mostra "Generazione e utilizzo di virtualenv da CMake". – drizzd

risposta

0

Il succo collegato funziona

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 
) 

Si noti che potrebbe essere necessario utilizzare ${CMAKE_CURRENT_BINARY_PATH/venv} o simili se si utilizza WORKING_DIRECTORY per ignorare la directory di lavoro corrente.

+0

Invece di codificare hard pythonversion in 'set (VIRTUALENV ...)' si potrebbe usare la variabile '$ {PYTHON_EXECUTABLE}' definita da 'find_package (...' per essere coerenti. Probabilmente si dovrebbe anche chiamare '$ { PYTHON_EXECUTABLE} -m virtualenv' per essere sicuro di chiamare quello corretto.Questo script cmake ha anche il problema che non funziona su Windows, ma non vedo un modo pulito per risolvere questo atm. – NOhs