CMake - 设置python virtualenv

MKa*_*ras 11 cmake virtualenv

我希望我的项目正在使用cmake中的部分构建 - 让cmake为我的python代码设置virtualenv.

这通常是完成还是我应该假设我的python环境将成为全球环境?

seh*_*ehe 4

链接的要点有效

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
)
Run Code Online (Sandbox Code Playgroud)

${CMAKE_CURRENT_BINARY_PATH/venv}请注意,如果您使用 或类似命令WORKING_DIRECTORY来覆盖当前工作目录,则可能需要使用或 类似命令。

  • 可以使用“find_package(...”定义的“${PYTHON_EXECUTABLE}”变量来保持一致,而不是在“set(VIRTUALENV ...)”中硬编码python版本。人们可能还应该调用“${PYTHON_EXECUTABLE” } -m virtualenv` 以确保调用正确的脚本。此 cmake 脚本也存在无法在 Windows 上运行的问题。但我没有看到一种巧妙的方法来修复此 atm。 (3认同)