2015-06-12 16 views
7

Ich möchte für mein Projekt, das mit Portionen in cmake gebaut wird - cmake eingerichtet haben ein virtualenv für meine Python-Code.CMake - Einrichten Python virtualenv

Ist das normalerweise getan oder sollte ich einfach davon ausgehen, dass meine Python-Umgebung eine globale sein wird?

+3

Dieser Gist https://gist.github.com/mjkillough/630ef274387429680577963f630b2691 demonstriert "Generieren und Verwenden eines virtualenv von CMake". – drizzd

Antwort

0

Die verknüpfte Kern arbeitet

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 
) 

Beachten Sie, dass Sie benötigen könnten ${CMAKE_CURRENT_BINARY_PATH/venv} oder ähnliches verwenden, wenn Sie WORKING_DIRECTORY verwenden das aktuelle Arbeitsverzeichnis außer Kraft zu setzen.

+0

Anstatt die Python-Version in 'set (VIRTUALENV ...)' hart zu codieren, könnte man die Variable '$ {PYTHON_EXECUTABLE}' benutzen, die durch 'find_package (...' definiert wird, um konsistent zu sein. Man sollte wahrscheinlich auch '$ { PYTHON_EXECUTABLE} -m virtualenv, um sicherzugehen, dass man das richtige aufruft. Dieses cmake-Skript hat auch das Problem, dass es nicht unter Windows läuft. Aber ich sehe keinen ordentlichen Weg, um diesen Fehler zu beheben. – NOhs

Verwandte Themen