В настоящее время я работаю над настройкой непрерывной интеграции для пакетов R, разработанных нашей компанией.У нас есть один проект Jenkins для каждого пакета R и соответствующая библиотека для каждого проекта.
Я уже определил логику, которая устанавливает все зависимости пакета в библиотеку проекта.Теперь я хочу определить этап проверки, который в основном выполняется
devtools::check("${PROJECT_DIR}/pkg")
, но использует только библиотеку проекта для зависимостей.Я попытался использовать пакет callr
следующим образом.
callr::r(
function(...) {
devtools::check(...)
),
args = list("${PROJECT_DIR}/pkg"),
libpath = "${PROJECT_DIR}/lib"
)
Однако процесс проверки все еще может найти пакеты, которые не установлены в libpath
.Есть ли способ убедиться, что на этапе сборки используется только "${PROJECT_DIR}/lib"
?
До сих пор я пробовал следующее безрезультатно
callr()
сlibpath
аргумент withr::with_libpaths
с аргументом new
- Просмотрите документацию в
devtools::check
и R CMD BUILD
для соответствующих параметров - Используйте
.libPaths("${JOB_DIR}/lib")
Ниже приведено описание, объясняющее неожиданное поведение callr
.Я ожидаю ошибку в строке 3.
find.package("ggplot2", .libPaths()[1])
#> Error in find.package("ggplot2", .libPaths()[1]): there is no package called 'ggplot2'
callr::r(function() { ggplot2::vars() }, libpath = .libPaths()[1])
#> named list()
find.package("ggplot2", .libPaths()[2])
#> [1] "/data/R/3.5.3/lib/R/library/ggplot2"
callr::r(function() { ggplot2::vars() }, libpath = .libPaths()[2])
#> named list()