Импортированные пакеты не устанавливаются автоматически

У меня есть частный пакет, хранящийся локально (и контролируемый версиями через SVN). Чтобы установить пакет, я прошу пользователя SVN-обновить его/ее каталог пакета, затем setwd() в каталоге, а затем devtools::install().

Этот пакет импортирует многие пакеты CRAN, которые не хранятся локально. Эти импортированные пакеты не устанавливаются автоматически во время установки, что приводит к появлению сообщения об ошибке Dependency package foo not available. Пользователь должен вручную установить install.packages('foo'), а затем повторить попытку, только чтобы получить Dependency package bar not available до тошноты, хотя foo и bar входят в число моих Imports:

Подробности:

Мой файл ОПИСАНИЯ выглядит так:

Package: apackage
Type: Package
Title: Package to Do Stuff
Version: 1.11111
Date: 2017-03-02
Author: C8H10N4O2
Maintainer: C8H10N4O2<[email protected]>
Description: Package that does many useful things
License: file LICENSE
Depends:
    R (>= 3.3.0)
Imports:
    bit64 (>= 0.9.5),
    data.table (>= 1.9.6), 
    extrafont (>= 0.17),
    foreach(>= 1.4.3),
    ggplot2 (>= 2.0.0),
    gbm (>= 2.1),
    grid (>= 3.2.3),
    gridExtra (>= 2.0.0),
    httr (>= 1.1.0),
    readxl (>= 0.1.1),
    scales (>= 0.4.0),
    xlsx (>= 0.5.7)
LazyData: true
RoxygenNote: 5.0.1
Suggests: testthat (>= 0.9.1)

Но при вызове check() или load_all() я все еще получаю сообщение об ошибке:

Error in (function (dep_name, dep_ver = NA, dep_compare = NA)  : 
  Dependency package gridExtra not available.

И тогда мой пользователь должен install.packages('gridExtra'), а затем он / она получает другую ошибку недоступной зависимости.

Что я пробовал:

Согласно пакетам R:

Перечисленные здесь Imports: пакеты должны присутствовать, чтобы ваш пакет работал. На самом деле каждый раз, когда ваш пакет устанавливается, эти пакеты, если они еще не установлены, будут установлены на вашем компьютере (devtools::load_all() также проверяет, установлены ли пакеты).

Я также проверил Написание расширений R но больше ничего не нашел по этой теме.

Правильно ли я понимаю, что эти пакеты должны устанавливаться автоматически, и что мне нужно сделать, чтобы обеспечить их автоматическую установку?

Я понимаю, что проблема не полностью воспроизводима, но я не могу дать ссылку на свой репозиторий, поэтому я буду рад предоставить любые дополнительные сведения.

**versions**
R 3.4.0, platform = x86_64-w64-mingw32
devtools 1.13.1

person C8H10N4O2    schedule 24.05.2017    source источник
comment
Вы настроили свой собственный репозиторий с приватным пакетом? Ваш репозиторий также содержит зависимости для пакета? Обычно install.packages('foo') устанавливается из CRAN, но вы, похоже, делаете здесь что-то еще. Как именно вы заставили пользователя настроить свое рабочее пространство R, чтобы это работало?   -  person MrFlick    schedule 24.05.2017
comment
@MrFlick да, я использую свой собственный репозиторий SVN для своего пакета. Он не содержит пакетов, которые я импортирую. Я обновлю вопрос. Спасибо за Ваш интерес.   -  person C8H10N4O2    schedule 24.05.2017


Ответы (1)


Вы заново изобретаете упаковку с R. Я не советую. Вы можете просто drat создать репозиторий. Это проверено и верно и работает.

И этот аспект развертывания как для производства локальных пакетов, так и для их использования и установки полностью ортогонален тому, где вы храните исходные коды. Не путайте репозиторий исходного кода с механизмом распространения кода.

В целом, локальное использование drat вместе с локальным экземпляром GitHub Enterprise отлично сработало для нас в работает, и drat в целом довольно широко используется.

(Обычные отказы от ответственности, поскольку я был тем, кто начал дерьмо, но мне повезло куча участников тоже.)

person Dirk Eddelbuettel    schedule 24.05.2017
comment
Спасибо за совет, хоть он и не отвечает на мой непосредственный вопрос. Я вообще не знаком с дерьмом. Помимо проблемы с зависимостями, обновление каталога пакета из SVN и сборка оттуда очень хорошо работает для нашей небольшой команды. Различия позволяют очень легко понять, что изменилось между фиксациями. Можете ли вы уточнить, что вы имеете в виду, не путайте репозиторий исходного кода с механизмом распространения кода? - person C8H10N4O2; 24.05.2017
comment
Да, я уже отвечал на это раньше; см. четыре виньетки на драт, а также другие вопросы здесь. Короче говоря, только install.packages() извлекает для вас зависимости. Установка из SVN работает для различных определений работы, но хуже. Почти все опытные пользователи R согласны: используйте пакеты, и использование репозиториев пакетов является следствием этого. - person Dirk Eddelbuettel; 24.05.2017
comment
C8H10N4O2, разобрался? У меня такая же проблема. Спасибо! - person Ketty; 05.04.2018
comment
@Dirk Eddelbuettel Я чувствую, что это повторяющаяся проблема, которая либо не решена, либо не задокументирована, либо я упускаю суть. Импорт я понял как способ установить все зависимости к вашему пакету прямо из CRAN. Панель ошибок пакета зависимостей недоступна мало что говорит, но это точно не означает, что пакет недоступен в CRAN. Следовательно, пользователю нужно будет просто установить все недостающие пакеты? Звучит немного неправильно - person Justin Thong; 06.04.2018
comment
@JustinThong Вам нужен лучший пример / может быть, свежий вопрос. Например, если я запускаю новую систему (скажем, контейнер Docker) и запрашиваю RcppArmadillo из CRAN, конечно, я также получаю Rcpp, от которого зависит / Imports / LinkingTo. Это не зависит от формы: любой из Depends, Imports, LinkingTo делает это в соответствии с документацией. - person Dirk Eddelbuettel; 06.04.2018
comment
@dirkeddelbuettel Да. Вероятно, разумно попробовать новую установку в контейнере докеров. Я рад узнать, какая среда и глобальные настройки вызывают это. спасибо в любом случае - person Justin Thong; 06.04.2018
comment
Хорошо. Я думаю, после некоторых поисков. Стало ясно, что импорт в файл DESCRIPTION создает какие-либо зависимости только в том случае, если ваш пакет уже находится в CRAN. Если его еще нет в CRAN, любой локально работающий проект должен установить зависимости вручную через install.packages. Интересно, есть ли в этом причина? Эта ситуация противоречит обычной установке NPM. - person Justin Thong; 07.04.2018