Почему Devtools не уважает мои ограничения зависимостей в пакете R - PullRequest
1 голос
/ 08 апреля 2020

Я не программист R. Я веб-разработчик, который используется для composer менеджера зависимостей для PHP, который имеет файл. json, который позволяет вам указать ограничения версии пакета для вашего приложения. Затем вы запускаете менеджер, и он разрешает ваши зависимости в набор версий, которые он записывает в файл .lock. Из этого файла блокировки у меня есть очень специфический c набор версий пакета, который не меняется при развертывании в производственной среде.

Я ищу похожую механику с R, так как мы запускаем R в облаке и мы стремимся автоматизировать развертывание, и мы хотим быть уверены, что в dev работает та же версия пакета, что и в рабочей среде.

Поэтому, чтобы получить аналогичное поведение, я решил заблокировать зависимости в файл DESCRIPTION моего пакета, указав точную версию моего пакета (что не рекомендуется в документации). Поэтому я создал пустой пакет R с одной зависимостью (следуя этому руководству: https://tinyheero.github.io/jekyll/update/2015/07/26/making-your-first-R-package.html) со следующим ОПИСАНИЕМ. ananas - это просто случайное имя для моего случайного пакета.

Package: ananas
Title: What the Package Does (One Line, Title Case)
Version: 0.0.0.9000
Authors@R: 
    person(given = "First",
           family = "Last",
           role = c("aut", "cre"),
           email = "first.last@example.com",
           comment = c(ORCID = "YOUR-ORCID-ID"))
Description: What the package does (one paragraph).
License: What license it uses
Encoding: UTF-8
LazyData: true
Imports:
    anytime (== 0.3.0)

Если вы проверите документацию по http://r-pkgs.had.co.nz/description.html#dependencies и прокрутите до заголовка «versioning» (не «version», который дальше). Вы можете видеть пример, ясно заявляющий, что можно использовать точные ограничения версий зависимостей.

Затем я попытался использовать следующие команды для установки зависимостей и самого пакета

Rscript -e 'devtools::install("ananas", lib="r-library", upgrade="never")'
Rscript -e 'devtools::install("ananas", lib="r-library")'

И У меня есть файл .Rprofile, в котором я запускаю команду установки со следующим содержимым

.libPaths(c("./r-library", .libPaths()))

Тем не менее, когда я попал в папку r-library, чтобы проверить пакет anytime. Я открыл файл DESCRIPTION для пакета anytime и вижу, что он на момент написания последней версии 0.3.7 не соответствует ограничениям точно 0.3.0 в файле DESCRIPTION моего пакета.

Итак, мой вопрос: почему devtools не соблюдает ограничения версии? Чего мне не хватает?

Очень похоже на следующую неотвеченную проблему stackoverflow: R не учитывает максимальную версию при установке зависимостей пакета

...