R: предотвратить повторную компиляцию исходного кода с помощью devtools :: install - PullRequest
0 голосов
/ 04 мая 2020

Я нахожусь в процессе разработки пакета R с внешним исходным кодом, который долго компилируется. В то время как время компиляции не является большой проблемой для одноразовой установки, я должен регулярно переустанавливать пакет для тестирования новых дополнений. Можно ли предотвратить повторную компиляцию исходного кода, если в него не было внесено никаких изменений?

Мне не обязательно, чтобы это было автоматизировано, но я не могу найти и ручное решение. Поскольку мой исходный код написан на Rust, следующий пример является наиболее представительным для меня (обратите внимание, что для установки требуется Rust car go):

git clone https://github.com/r-rust/hellorust
Rscript -e "devtools::install('hellorust', quick = TRUE)"

Когда я запускаю вышеизложенное, я вижу что файл hellorust.so был создан в каталоге src, но как мне заставить devtools::install() использовать этот файл, а не перекомпилировать все? Не похоже, что devtools::install(quick = TRUE) или devtools::install(build = FALSE) предназначены для этого ...

В качестве альтернативы, возможно ли достичь желаемого поведения на стороне Rust? Я не понимаю, почему машина go перекомпилировала бы все, если бы не было никаких изменений, и целевой каталог все еще там. Тем не менее, я довольно плохо знаком с Rust и скомпилированными языками в целом, поэтому мое понимание более широких понятий, используемых здесь, к сожалению, весьма ограничено ...

Мне также было бы интересно узнать, есть ли лучший способ проверить пакеты R во время разработки, чем вручную переустановить их.

1 Ответ

0 голосов
/ 11 мая 2020

Судя по комментариям r2evans, окончательный ответ кажется, что это не то, для чего devtools::install.

Согласно документации devtools существует три основных инструмента для "частых задач разработки":

  • load_all
  • document
  • test

Из них load_all "имитирует установку и перезагрузку вашего пакета, загрузку кода R в R /, скомпилированные общие объекты в файлах src / и data в данных / ". По умолчанию load_all() не будет перекомпилировать исходный код в src / (если только для флага recompile не установлено значение true).

Поэтому ответом будет использование load_all вместо install во время пакета разработка и ручное управление, когда компилировать исходный код, используя что-то вроде devtools::compile_dll.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...