Скажем, у меня есть пакет с 5 пакетами в Depends
файла DESCRIPTION, и я только что понял, что не рекомендуется иметь столько пакетов в Depends
из-за неизбежных конфликтов импорта, которые начинают появляться по мере увеличения количества импортируемых функций. увеличиваются. Я бы хотел переместить, скажем, только пакет pkg
в Imports
, но я понятия не имею, какие функции pkg
используются в моем пакете. В идеале у меня должны быть модульные тесты с полным охватом исходного кода пакета, и, просто удалив pkg
из зависимостей, я выявлю импорты, специфичные для pkg
, из тестовых ошибок could not find function "foo"
. Но, к сожалению, у меня нет такой широты тестового покрытия. Мне было интересно, есть ли более эффективный способ, чем просмотр всего кода пакета, для идентификации этих импортов.
Для пакета R, как эффективно переместить пакет из Depends в Imports
comment
@Al_J_Abadi, если ответ решает вашу проблему, вы должны принять его. См. здесь.
- person Suren   schedule 08.01.2021
Ответы (1)
Это очень просто. Изменять
Depends: pkgA, pkgB, pgC
to
Imports: pkgA, pkgB, pgC
а также добавьте это в файл NAMESPACE
:
import("pkgA")
import("pkgB")
import("pkgC")
который будет глобально импортировать все экспортированные символы, чтобы вы могли продолжить работу, как и раньше.
Вы также можете выборочно импортировать через
importFrom("pkgA", "func1", "func2", "func3")
и если вы запустите R CMD check
, он на самом деле (очень полезно) скажет вам, какие функции в этом нуждаются. Второй метод несколько более точен, но требует немного больше усилий для настройки.
И я не думаю, что у нас есть инструмент для удаления «фиктивного импорта». Обнаружение того, какие импорты могут быть неиспользованными, может быть чем-то, что вам нужно проверить вручную (но попытка удалить один и посмотреть, строит ли он все еще + проверяет нормально).
person
Dirk Eddelbuettel
schedule
07.01.2021
Спасибо, @dirk-eddelbuettel. Метод
import('pkg')
по-прежнему будет выдавать предупреждение о конфликте, и запуск R CMD check
должен помочь.
- person aljabadi; 07.01.2021