我希望我的项目能够使用cmake设置虚拟环境来运行Python代码。此操作通常是否执行?或者我应该默认使用全局Python环境?
我希望我的项目能够使用cmake设置虚拟环境来运行Python代码。此操作通常是否执行?或者我应该默认使用全局Python环境?
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
)
WORKING_DIRECTORY
来覆盖当前工作目录,则可能需要使用${CMAKE_CURRENT_BINARY_PATH/venv}
或类似的路径。${PYTHON_EXECUTABLE}
变量替代在set(VIRTUALENV ...)
中硬编码的Python版本号,该变量由find_package(...)
定义,以保持一致。还应该调用${PYTHON_EXECUTABLE} -m virtualenv
以确保调用正确的Python版本。这个CMake脚本在Windows上无法运行,但我目前没有看到解决方法。 - NOhsadd_custom_command(OUTPUT ${CURRENT_SOURCE_DIR}/.venv COMMAND ${PYTHON_EXECUTABLE} -m venv .venv
创建虚拟环境。但是,它给了我错误[100%] 生成venv.stamp 错误:找不到文件“setup.py”。目录无法以可编辑模式安装:/Users/aaragon/Local/plexus/build/temp.macosx-10.9-x86_64-3.8
。您知道可能出了什么问题吗? - aaragonadd_custom_command(
OUTPUT venv.stamp
DEPENDS venv ${PROJECT_SOURCE_DIR}/requirements.txt
COMMAND .venv/bin/pip install -e ${CMAKE_CURRENT_SOURCE_DIR}
)
- aaragon