Я использую CMake для автоматизации установки Python проекта, использующего MPI и основанного на PETS c. До сих пор мне удалось проверить MPI и Python3, а затем создать виртуальную среду, в которой будут установлены все пакеты. Я также устанавливаю их автоматически, читая пакеты, указанные в файле setup.py
. Пока у меня есть две проблемы:
- В некоторых пакетах Python требуется установка переменных среды. Например,
petsc
использует переменные среды PETSC_CONFIGURE_OPTIONS
для настройки установки. Мне не удается установить основной проект в виртуальной среде. Я получаю сообщение об ошибке
Not uninstalling plexus at /Users/aaragon/Local/plexus, outside environment /Users/aaragon/Local/plexus/build/temp.macosx-10.15-x86_64-2.7/.venv
, потому что я установил в своей оболочке не устанавливать пакеты python, если я не нахожусь в виртуальной среде.
Мне удалось решить 1. но я не думаю, что решение элегантно, и я не уверен, что оно будет работать в других системах. Каким-то образом я думаю, что функция set
должна работать (см. MWE ниже), но я только что закончил установку COMMAND export VAR="asdf"
перед вызовом pip
. Для 2. У меня до сих пор нет никаких потенциальных клиентов. Могу ли я выполнить команду, которая переводит меня в виртуальную среду для установки основного пакета? как мне это сделать?
Это код в моем CMakeLists.txt
:
cmake_minimum_required(VERSION 3.1)
if(${CMAKE_VERSION} VERSION_LESS 3.15)
cmake_policy(VERSION ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION})
else()
cmake_policy(VERSION 3.15)
endif()
enable_testing()
project(plexus VERSION 0.1)
# find MPI
find_package(MPI REQUIRED)
if (NOT MPI_FOUND)
message(FATAL_ERROR "MPI not found in the system!")
endif()
set(CMAKE_CXX_COMPILE_FLAGS ${CMAKE_CXX_COMPILE_FLAGS} ${MPI_COMPILE_FLAGS})
set(CMAKE_CXX_LINK_FLAGS ${CMAKE_CXX_LINK_FLAGS} ${MPI_LINK_FLAGS})
include_directories(MPI_INCLUDE_PATH)
# set environmental variables
set(ENV{PETSC_CONFIGURE_OPTIONS} "\"--with-fc=0 --download-metis=1 --download-parmetis=1\"") # this should
# find Python
find_package (Python3 COMPONENTS Interpreter Development REQUIRED)
set(ignoreMe "${PYTHON_EXECUTABLE}") # get rid of CMake warning for not used variable
# Generate the virtual environment
add_custom_command(
OUTPUT venv
COMMAND ${Python3_EXECUTABLE} -m venv .venv
)
add_custom_command(
OUTPUT venv.stamp
DEPENDS venv ${PROJECT_SOURCE_DIR}/requirements.txt
COMMAND export PETSC_CONFIGURE_OPTIONS=\"--with-fc=0 --download-metis=1 --download-parmetis=1\" && .venv/bin/pip install -e ${CMAKE_CURRENT_SOURCE_DIR} --upgrade
)
# Build command line to run py.test.
set(PYTEST
${CMAKE_CURRENT_BINARY_DIR}/.venv/bin/python3
${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
)