В настоящее время я занимаюсь выпуском этого пакета 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.
Единственный способ правильно установить пакет:
- Удаление зависимости
gWidgetsRGtk2
из моего пакета; - Попросите пользователей заранее установить
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 проблема связана, но немного отличается.
- Прежде всего, пакет "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
, но тогда я получаю ПРЕДУПРЕЖДЕНИЕ при сборке/установке.
Итак, и в этом случае: Кто-нибудь знает, как я могу решить эту проблему?
Заранее благодарю за любую помощь ! (И спасибо за чтение!)
Лоренцо