Packrat::restore() для системных зависимостей

#r #ubuntu #package-managers #packrat #renv

#r #ubuntu #менеджеры пакетов #packrat #renv

Вопрос:

Я разрабатывал блестящее приложение на компьютере с Windows в Rstudio. Теперь мне нужно разработать его на компьютере с Linux, а позже потребуется развернуть его на сервере. Из-за необходимости запускать приложение на разных платформах я искал какое-нибудь приложение для управления средой, чтобы мне не приходилось настраивать и переустанавливать необходимые пакеты вручную.

Я пытался использовать Packrat для этой цели. Я сделал снимок на своем компьютере с Windows, скопировал и вставил проект в свою Ubuntu, повторно открыл проект в RStudio, установил Packrat, и восстановление пакетов запустилось автоматически. Затем я столкнулся с проблемой, заключающейся в том, что некоторые пакеты, требующие системных зависимостей, не были установлены автоматически, например, rgdal и jqr. Поэтому мне пришлось вручную устанавливать эти системные зависимости вручную в терминале (мне потребовалось некоторое время, потому что их было около 10, что требовало дополнительных системных зависимостей).

Мне интересно, есть ли более простой способ просто автоматически справиться с этим. Позже мне нужно будет поработать с системным администратором для развертывания приложения на сервере. Мне интересно, имеет ли Packrat возможность автоматической установки системных зависимостей на компьютере / сервере Linux. Если кто-нибудь сталкивался с этой проблемой раньше или у него есть другие лучшие варианты, пожалуйста, дайте мне знать!

Спасибо!

Ответ №1:

Здравствуйте и добро пожаловать в StackOverflow.

Вы сталкиваетесь с вопросом, который на самом деле гораздо сложнее решить, чем вы можете подумать на первый взгляд — развертывание сложных зависимостей пакетов R в разных операционных системах — действительно сложная и, по правде говоря, нерешаемая проблема!

Вы, конечно, можете использовать packrat and renv для зависимостей пакетов R и моментальных снимков определенных версий. Но это ничего не делает для зависимостей системного уровня, которые просто воспринимаются как «заданные». Так что нет, чтобы просто перенести в другое поле и сказать «абракадабра». Извините!

Самым близким, что мы все могли исправить, может быть Docker, где вы можете создать переносимый модуль выполнения, который может быть развернут везде, где запускается Docker: Windows, macOS, разные версии Linux, … поскольку он кодирует все.

Комментарии:

1. Спасибо, Дирк. Я предполагаю, что тогда будет использоваться Docker.

2. Да, это также немного зависит от того, что именно вы хотите сделать — например, одна из причин, по которой Shiny стал настолько популярным, заключается в том, что он «извлекает R из этого»: коллегам / пользователям / клиентам просто нужен веб-браузер. Аналогично API-интерфейсам, работающим по сети, требуется только подключение к сети, но затем вам нужен сервер. И так далее, и так далее. Пакет R уже является довольно портативной «единицей», так что это тоже выбор.