2015-06-12 20 views
7

Tôi muốn cho dự án của tôi đang được xây dựng với các phần trong cmake - để có cmake thiết lập một virtualenv cho mã python của tôi.CMake - thiết lập python virtualenv

Điều này thường được thực hiện hay tôi nên giả định rằng môi trường python của tôi sẽ là môi trường toàn cầu?

+3

Gist này https://gist.github.com/mjkillough/630ef274387429680577963f630b2691 minh họa "Tạo và sử dụng virtualenv từ CMake". – drizzd

Trả lời

0

Các ý chính liên kết các công trình

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 
) 

Lưu ý rằng bạn có thể cần phải sử dụng ${CMAKE_CURRENT_BINARY_PATH/venv} hoặc tương tự nếu bạn sử dụng WORKING_DIRECTORY để ghi đè lên thư mục làm việc hiện hành.

+0

Thay vì hardcoding pythonversion trong 'set (VIRTUALENV ...)' ta có thể sử dụng biến '$ {PYTHON_EXECUTABLE}' được định nghĩa bởi 'find_package (...' để nhất quán. Có lẽ cũng nên gọi '$ { PYTHON_EXECUTABLE} -m virtualenv' để đảm bảo gọi đúng tập lệnh cmake này cũng có vấn đề là nó không chạy trên Windows.Nhưng tôi không thấy một cách gọn gàng để sửa lỗi này. – NOhs

Các vấn đề liên quan