Выпуск на CRAN r-пакета, зависящего от RGtk2 и внешних библиотек

В настоящее время я занимаюсь выпуском этого пакета GITHUB на CRAN:

https://github.com/lbusett/MODIStsp , но я столкнулся с некоторыми проблемами, которые, я надеюсь, кто-то сможет решить. помогите мне победить! (Извините за длинное сообщение, но вкратце объяснить проблему сложно. Надеюсь, вы захотите дочитать до конца... )

Проблема, с которой я столкнулся, связана с тем, что я использую пакет gWidgetsRGtk2 для создания графического интерфейса. Однако gWidgetsRGtk2 зависит от пакета RGtk2, который сам требует для работы некоторых внешних библиотек. Это приводит к следующим проблемам с выпуском CRAN:

В Windows

Если я оставлю gWidgetsRGtk2 в списке зависимостей моего пакета, проверка его в RStudio пройдет успешно. Я не получаю ни ПРИМЕЧАНИЙ, ни ПРЕДУПРЕЖДЕНИЙ (при условии, что у меня установлены все зависимости).

R Результаты проверки CMD 0 ошибок | 0 предупреждений | 0 заметок R Проверка CMD прошла успешно

Тоже build_win проходит без проблем

Однако, если я затем попытаюсь установить пакет из github , и даже если gWidgetsRGtk2 уже установлен в моей библиотеке, установка завершится ошибкой. Так, например:

devtools::install_github("lbusett/MODIStsp", ref = 'feature/cran_rel_candidate')

всегда дает мне следующую ошибку:

Предупреждение: не удалось загрузить динамическую библиотеку RGtk2 при попытке установить ее. Пожалуйста, установите GTK+ с http://ftp.gnome.org/pub/gnome/binaries/win64/gtk+/2.22/gtk+-bundle_2.22.1-20101229_win64.zip Если пакет по-прежнему не загружается, убедитесь, что GTK+ установлен и в вашей переменной окружения PATH В ЛЮБОМ СЛУЧАЕ ПЕРЕЗАГРУЗИТЕ R ПЕРЕД ПОПЫТКОЙ ЗАГРУЗИТЬ ПАКЕТ СНОВА Ошибка в inDL(x, as.logical(local), as.logical(now), ...): невозможно загрузить общий объект 'C :/Users/lb/Documents/R/win-library/3.3/RGtk2/libs/x64/RGtk2.dll': Ошибка загрузки библиотеки: невозможно найти.....

, и я получаю информационное окно, говорящее мне, что "libaptk-1.0-0.dll" отсутствует. Нажатие "ok" в сообщении отправляет меня в бесконечный цикл попытки установки RGTk2, и я придется принудительно закрыть RStudio.

Единственный способ правильно установить пакет:

  1. Удаление зависимости gWidgetsRGtk2 из моего пакета;
  2. Попросите пользователей заранее установить gWidgetsRGtk2 и загрузить его хотя бы один раз. (В этом случае после сообщения «libaptk-1.0-0.dll отсутствует» открывается эта информационная панель, позволяющая установить библиотеки GTK+)

введите описание изображения здесь

Так, например, это:

install.packages("gWidgetsRGtk2")
library("gWidgetsRGtk2")
install_github("lbusett/MODIStsp", ref = 'devel')   # In devel, 'gWidgetsRGtk2'is not a dependency

работает без вопросов.

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

проверка зависимостей в коде R... ПРЕДУПРЕЖДЕНИЕ Вызов 'loadNamespace' или 'requireNamespace' не объявлен из: 'gWidgetsRGtk2' R Результаты проверки CMD 0 ошибок | 1 предупреждение | 0 заметок

R Проверка CMD прошла успешно

Итак, в конце концов, мой вопрос: Знаете ли вы, есть ли способ решить эту проблему или как мне с ней справиться в процессе выпуска CRAN-релиза?

В Linux

В Linux проблема связана, но немного отличается.

  1. Прежде всего, пакет "RGTk2" требует предварительной установки некоторых внешних библиотек (Cairo >= 1.0.0, ATK >= 1.10.0, Pango >= 1.10.0, GTK+ >= 2.8.0, GLib >= 2.8. 0). Кроме того, мне нужно установить «gdal» с поддержкой hdf4.

Установка следующего файла YAML позволяет мне проходить проверки TRAVIS-CI (https://travis-ci.org/lbusett/MODIStsp/builds/168603035):

language: r
cache: packages
warnings_are_errors: false
matrix:
  include:
    - os: linux
      dist: trusty
      sudo: required
      env:
      global:
        - R_BUILD_ARGS=" "
        - R_CHECK_ARGS="--no-build-vignettes --no-manual --timings"
        - R_CHECK_TIMINGS_="0"
        - BOOTSTRAP_LATEX="1"    
  addons:
    apt:
      packages:
        - libgdal-dev
        - libproj-dev
        - libcurl4-openssl-dev
        - libgtk-3-dev
  r_binary_packages:
    - cairoDevice
    - RGtk2

чего я не знаю, так это если/как/где я должен указать такие зависимости для отправки в CRAN. Может ли кто-нибудь объяснить это мне / указать мне на какую-то ссылку?

  • Вторая проблема снова связана с зависимостью gWidgetsRGtk2. Если я оставлю зависимость, сборка завершится ошибкой с этим сообщением (https://travis-ci.org/lbusett/MODIStsp/builds/168567126):

установка исходного пакета ‘gWidgetsRGtk2’ … пакет ‘gWidgetsRGtk2’ успешно распакован и проверены суммы MD5 R inst тестирует подготовку пакета к отложенной загрузке Сеанс R не имеет заголовка; GTK+ не инициализирован. (R:15669): Gtk-WARNING **: gtk_disable_setlocale() должен быть вызван до gtk_init() Ошибка: .onLoad не удалось выполнить в loadNamespace() для 'cairoDevice', подробности:

вызов: fun(libname, pkgname) ошибка: отображение GDK не найдено - убедитесь, что X11 запущен Ошибка: не удалось загрузить пакет «cairoDevice»

удаление ‘/home/travis/R/Library/gWidgetsRGtk2’

Ошибка: команда не выполнена (1)

Казнь остановлена

Команда «Rscript -e 'deps ‹- devtools::dev_package_deps(dependencies = NA);devtools::install_deps(dependencies = TRUE);if (!all(deps$package %in%installed.packages())) { message ("отсутствует: ", paste(setdiff(deps$package,installed.packages()), crush=", ")); q(status = 1, save = "no")}'" не удалось и во время .

Как и в случае с Windows, проблема исчезает, если я удаляю зависимость gWidgetsRGtk2, но тогда я получаю ПРЕДУПРЕЖДЕНИЕ при сборке/установке.

Итак, и в этом случае: Кто-нибудь знает, как я могу решить эту проблему?

Заранее благодарю за любую помощь ! (И спасибо за чтение!)

Лоренцо


person lbusett    schedule 18.10.2016    source источник
comment
stackoverflow.com/questions/39568937/ Ответ в этом посте может помочь ~   -  person microly    schedule 20.08.2019