Создание локального репозитория пакетов R с помощью miniCRAN

Область применения: SQL Server 2016 (13.x) и более поздних версий Управляемый экземпляр SQL Azure

В этой статье рассказано, как установить пакеты R в автономном режиме с помощью пакета miniCRAN, чтобы создать локальный репозиторий пакетов и зависимостей. Пакет miniCRAN определяет и скачивает пакеты и зависимости в одну папку, которая копируется на другие компьютеры для автономной установки пакетов R.

Можно указать один пакет или несколько; miniCRAN рекурсивно считывает дерево зависимостей для этих пакетов. Затем он скачивает только перечисленные пакеты и их зависимости из CRAN или аналогичных репозиториев.

По завершении miniCRAN создает согласованный внутри себя репозиторий, состоящий из выбранных пакетов и всех необходимых зависимостей. Этот локальный репозиторий можно переместить на сервер и перейти к установке пакетов без подключения к Интернету.

Опытные пользователи R часто ищут список пакетов-зависимостей в файле DESCRIPTION скачанного пакета. Однако пакеты, перечисленные в разделе Imports, могут иметь зависимости второго уровня. По этой причине рекомендуется использовать miniCRAN для формирования полного набора необходимых пакетов.

Цель создания локального репозитория

Цель создания локального репозитория пакетов — формирование единого расположения, которое администратор сервера или другие пользователи организации (особенно те, у которых нет доступа к Интернету) могут использовать для установки новых пакетов R на сервере. После создания репозитория его можно изменять, добавляя новые пакеты или обновляя существующие.

Репозитории пакетов полезны в следующих сценариях:

  • Безопасность. Многие пользователи R привыкли произвольно скачивать и устанавливать новые пакеты R из CRAN или одного из его зеркальных сайтов. Однако по соображениям безопасности рабочие серверы под управлением SQL Server обычно не имеют подключения к Интернету.

  • Упрощенная автономная установка. Для установки пакета на автономном сервере необходимо также скачать все пакеты-зависимости. Использование miniCRAN упрощает получение всех зависимостей в правильном формате и позволяет избежать ошибок с зависимостями.

  • Улучшенное управление версиями. В многопользовательской среде существуют веские причины избегать неограниченной установки разных версий пакетов на сервере. Используйте локальный репозиторий, чтобы обеспечить согласованный набор пакетов для пользователей.

Установка miniCRAN

Сам пакет miniCRAN зависит от 18 других пакетов CRAN, среди которых есть пакет RCurl, имеющий системную зависимость от пакета curl-devel. Аналогично, пакет XML зависит от libxml2-devel. Для разрешения зависимостей рекомендуется сначала создать локальный репозиторий на компьютере с полным доступом к Интернету.

Выполните следующие команды на компьютере с базовым пакетом R, инструментами R и подключением к Интернету. Предполагается, что это не компьютер SQL Server. Следующие команды устанавливают пакеты miniCRAN и igraph. В этом примере проверяется, установлен ли пакет, но можно обойти инструкции if и установить пакеты напрямую.

if(!require("miniCRAN")) install.packages("miniCRAN") 
if(!require("igraph")) install.packages("igraph") 
library("miniCRAN")

Настройка зеркального отображения CRAN и моментального снимка MRAN

Укажите зеркальный сайт, который будет использоваться при получении пакетов. Например, можно использовать сайт MRAN или любой другой сайт в вашем регионе, который содержит необходимые пакеты. Если скачивание завершается ошибкой, попробуйте другой зеркальный сайт.

CRAN_mirror <- c(CRAN = "https://mirrors.nics.utk.edu/cran/")

Создание локальной папки

Создайте локальную папку для хранения собранных пакетов. Если это действие повторяется часто, стоит использовать описательное имя, например "miniCRANZooPackages" или "miniCRANMyRPackageV2".

Укажите папку в качестве локального репозитория. Синтаксис R использует прямую косую черту для имен путей, что противоречит соглашениям, используемым в Windows.

local_repo <- "C:/miniCRANZooPackages"

Добавление пакетов в локальный репозиторий

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

Не стоит добавлять зависимости в этот начальный список. Пакет igraph, используемый miniCRAN, автоматически создает список зависимостей. Дополнительные сведения об использовании созданного графа зависимостей см. в разделе Использование miniCRAN для указания зависимостей пакетов.

  1. Добавьте целевые пакеты "zoo" и "forecast" в переменную.

    pkgs_needed <- c("zoo", "forecast")
    
  2. При необходимости можно построить график зависимостей. Это необязательно, но может быть информативно.

    plot(makeDepGraph(pkgs_needed))
    
  3. Создайте локальный репозиторий. При необходимости измените версию R на версию, установленную на экземпляре SQL Server. Если вы обновляли компоненты, ваша версия может быть новее исходной. Дополнительные сведения см. в статье Получение сведений о пакете R.

    pkgs_expanded <- pkgDep(pkgs_needed, repos = CRAN_mirror);
    makeRepo(pkgs_expanded, path = local_repo, repos = CRAN_mirror, type = "win.binary", Rversion = "3.3");
    

    Из этих сведений пакет miniCRAN создает структуру папок, которую необходимо скопировать в SQL Server позже.

На этом этапе у вас должна быть папка, содержащая необходимые пакеты, а также все необходимые дополнительные пакеты. Папка должна содержать коллекцию архивированных пакетов. Не распаковывайте пакеты и не переименовывайте файлы.

При необходимости выполните следующий код, чтобы вывести список пакетов в локальном репозитории miniCRAN.

pdb <- as.data.frame(pkgAvail(local_repo, type = "win.binary", Rversion = "3.3"), stringsAsFactors = FALSE);
head(pdb);
pdb$Package;
pdb[, c("Package", "Version", "License")]

Добавление пакетов в библиотеку экземпляров

После создания локального репозитория с нужными пакетами переместите репозиторий пакетов на компьютер SQL Server. В следующей процедуре описывается установка пакетов с помощью средств R.

Примечание.

Для установки пакетов рекомендуется использовать sqlmlutils. См. статью Установка новых пакетов R с помощью sqlmlutils.

  1. Целиком скопируйте папку, содержащую репозиторий miniCRAN, на сервер, на котором планируется устанавливать пакеты. Папка обычно имеет следующую структуру:

    <miniCRAN root>/bin/windows/contrib/version/<all packages>

    В этой процедуре мы предполагаем, что папка находится на корневом диске.

  2. Откройте средство R, связанное с экземпляром (например, можно использовать RGUI. exe). Щелкните правой кнопкой мыши и выберите команду Запуск от имени администратора, чтобы разрешить средству вносить обновления в систему.

    • Например, расположением файлов по умолчанию для RGUI является C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\R_SERVICES\bin\x64.
    • Например, расположением файлов для RGUI является C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\R_SERVICES\bin\x64.
    • Например, расположением файлов для RGUI является C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\R_SERVICES\bin\x64.
  3. Получите путь к библиотеке экземпляров и добавьте его в список путей к библиотекам.

    Например,

    outputlib <- "C:/Program Files/Microsoft SQL Server/MSSQL13.MSSQLSERVER/R_SERVICES/library"
    

    Например,

    outputlib <- "C:/Program Files/Microsoft SQL Server/MSSQL14.MSSQLSERVER/R_SERVICES/library"
    

    Например,

    outputlib <- "C:/Program Files/Microsoft SQL Server/MSSQL15.MSSQLSERVER/R_SERVICES/library"
    
  4. Укажите новое расположение на сервере, куда вы скопировали репозиторий miniCRAN, в качестве server_repo.

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

    inputlib <- "C:/miniCRANZooPackages"
    
  5. Так как вы работаете в новой рабочей области R на сервере, необходимо также добавить список пакетов для установки.

    mypackages <- c("zoo", "forecast")
    
  6. Установите пакеты, указав путь к локальной копии репозитория miniCRAN.

    install.packages(mypackages, repos = file.path("file://", normalizePath(inputlib, winslash = "/")), lib = outputlib, type = "win.binary", dependencies = TRUE);
    
  7. Из библиотеки экземпляров можно просмотреть установленные пакеты с помощью команды наподобие следующей:

    installed.packages()
    

Следующие шаги