Установить зависимости пользовательского пакета - PullRequest
0 голосов
/ 03 октября 2019

Я разработал локальный пакет, который зависит от других доступных в CRAN (например, pool). Поэтому, когда я пытаюсь установить пакет, используя стандартный

install.packages("/path/to/package",
                 repos = NULL,
                 type = "source")

, я получаю ошибку, потому что зависимости не установлены. install.packages имеет аргумент dependencies, который по умолчанию попытается установить эти зависимости. Однако, как указано на странице руководства (и прокомментировано в связанном вопросе ниже), repos = NULL означает, что зависимости игнорируются.

Чтобы обойти это, я использовал пакет miniCRAN, чтобы создать репозиторий, содержащий моипакет, надеясь, что я смогу сделать repos = c("myRepo", getOption("repos")), чтобы заставить его работать.

Теперь я могу установить свой пакет, используя

install.packages("package",
                 repos = c("/path/to/repo", getOptions("repos"),
                 type = "source")

Но только если я уже установил pool. Если нет, я все равно получаю сообщение об ошибке, потому что он не может найти зависимости.

Поэтому я позвонил miniCRAN::addPackage("pool"), который добавляет этот пакет и его многочисленные зависимости в мое хранилище, и все они появляются, если я вызываю miniCRAN::pkgAvail().

Однако, если я пытаюсь установить свой пакет снова, я все равно получаю ошибку there is no package called 'pool'.

Интересно, если я попытаюсь установить pool из репозитория,это работает.

install.packages("pool",
                 repos = "/path/to/repo",
                 type = "source")
install.packages("package",
                 repos = "/path/to/repo",
                 type = "source")

Очевидно, однако, что этот вид превосходит смысл добавления pool к репо: я мог бы с таким же успехом установить его из CRAN.

Так что жездесь, и действительно ли это единственный способ установить локальные пакеты и их зависимости CRAN?

1 Ответ

0 голосов
/ 11 октября 2019

Разобрался.

Проблема была в недоразумении с моей стороны относительно roxygen, которое я использовал для своей документации. Я предположил, что он обработал секцию Imports: файла DESCRIPTION, чего он не делает ( (1) , (2) ). Таким образом, в то время как файл NAMESPACE содержит все необходимые importFrom(pool, ...) вызовы, pool фактически не было в моем ОПИСАНИИ.

После исправления этого упущения, используя remote::install_local("path/to/pkg") (или devtools::install()) ()(3) ) работал: он установил мой пакет и вытащил свои зависимости из CRAN.

...