Как включить дополнительные пути в INCLUDE_DIR в аргументе configure.vars функции install.packages() в R?
У меня проблема с пакетом gdtools. Я хотел бы установить его из исходного кода, но, к сожалению, я не могу установить какие-либо дополнительные библиотеки на Linux. Что я делаю, чтобы решить это, это включение пакетов во время установки:
install.packages(repos = c("http://localhost.net/cran"), type = "source", pkgs = c('gdtools'), configure.vars = c("INCLUDE_DIR=/extra/gdtools/windows/cairo-1.15.10/include/cairo"))
Это позволяет мне сделать еще один шаг вперед. Но тогда мне нужно включить еще один каталог, указывающий на библиотеку freetype: /extra/gdtools/windows/cairo-1.15.10/include/freetype2/freetype
Но когда я пытаюсь добавить его в команду, это не работает. Я пытался сделать это разными способами, например, так, что это не работает:
install.packages(repos = c("http://localhost.net/cran"), type = "source", pkgs = c('gdtools'), configure.vars = c("INCLUDE_DIR=/extra/gdtools/windows/cairo-1.15.10/include/cairo /extra/gdtools/windows/cairo-1.15.10/include/freetype2/freetype"))
Может кто-нибудь помочь мне, как это сделать? Я пробовал также с уровня R CMD. Любое решение для меня приемлемо.
2 ответа
Это может быть довольно запутанной ситуацией, так как в документации R не указано явно, как это сделать. Однако есть несколько вариантов, которые должны помочь. Как вы увидите в примерах, хитрость заключается в том, как соединить струны вместе. Чтобы получить более одного каталога в INCLUDE_DIR или LIB_DIR, просто вставьте несколько каталогов в одинарные кавычки в полную строку, заключенную в двойные кавычки. Однако обратите внимание, что вам не нужно помещать флаги -I или -L в начале строки, но вы должны разместить их перед дополнительными каталогами. Это потому, что R добавит его за вас после анализа INCLUDE_DIR и LIB_DIR.
Предостережение для этих методов заключается в том, что каждый пакет может свободно реализовывать другие переменные и методы поиска библиотек и заголовков. Хотя LIB_DIR и INCLUDE_DIR кажутся обычно используемыми, можно найти пакет, который использует другие конкретные переменные среды вместо них. Также возможно, что пакет не добавляет -I или -L . Просто знайте, что ожидает пакет. Хорошая новость заключается в том, что эти общие принципы должны применяться даже при изменении имен переменных и т. Д.
Использование конфигурационных переменных
Настройка vars доступна при установке из командной строки
R CMD INSTALL --configure-vars="LIB_DIR='/my/lib/dir1 -L/my/lib/dir2' INCLUDE_DIR='/my/include/dir1 /my/include/dir2'" /path/to/myPackage
или в пределах R
install.packages("myPackage", configure.vars=c("LIB_DIR='/my/lib/dir1 -L/my/lib/dir2' INCLUDE_DIR='/my/include/dir1 -I/my/include/dir2'"))
Использование .Renviron
Вы также можете установить переменные среды для R в файле .Renviron. Этот файл читается R при запуске. См. Документацию R о том, как R обрабатывает .Renviron и где он ожидает его расположения. Вы можете просто добавить в файл нужные переменные, и R будет использовать их при установке пакетов.
LIB_DIR="/my/lib/dir1 -L/my/lib/dir2"
INCLUDE_DIR="/my/include/dir2 -I/my/include/dir2"
Хотя этот вариант может быть удобен, он также означает, что эти переменные будут использоваться для всех пакетов. Метод configure vars, возможно, лучше подходит для одноразовой установки или когда вам нужны настройки для каждого пакета (что выполняется с помощью именованных векторов или списков).
Используяconfigure.vars
вариант мне не подошел. Я не пробовал использовать .Renviron.
В разделе документации проекта R, посвященном настройке компиляции пакетов, объясняется, как использовать$HOME/.R/Makevars
файл, чтобы сделать это. Заполнение:PKG_CPPFLAGS_SITE = -I/path/to/my/custom/usr/local/include
где мои заголовки работают.
Если это разовая необходимость, я думаю, что переменная средыexport PKG_CPPFLAGS_SITE=-I/path/to/my/usr/local/include
перед запуском R тоже работает.