Перезагрузка модулей Python с пакетом R reticulate

Я хотел бы знать, есть ли способ перезагрузить модули, импортированные в R через пакет reticulate, аналогичный расширению autoreload для IPython. Например, предположим, что я разрабатываю свой собственный модуль локально, я мог бы импортировать его через

library(reticulate)
import_from_path("mypackage", "/path/to/package")

Однако, если я внесу изменения в код mypackage, единственный способ отразить их — перезапустить R. Это согласуется с нормальным поведением Python, когда модули не могут быть перезагружены. Одним из обходных путей может быть получение файла из пакета, в который я вношу изменения, т.е.

source_python("/path/to/package/file.py")

Однако, если file.py импортирует другие файлы в локальном пакете, которые изменяются, то изменения в этих файлах не будут отражены.


person Abiel    schedule 22.08.2018    source источник
comment
Если вы используете devtools, вы можете использовать load_all() для загрузки пакета и перезагрузки при внесении изменений.   -  person Dason    schedule 22.08.2018
comment
Насколько я понимаю, load_all предназначен только для пакетов R, тогда как здесь я импортирую пакет Python в R.   -  person Abiel    schedule 23.08.2018
comment
Я думаю, это была бы очень хорошая функция!   -  person stats-hb    schedule 22.05.2019


Ответы (1)


Это возможно, вызвав команды Python для перезагрузки:

Для Питона 2.7

> builtins <- import_builtins()
> builtins$reload(your_module)

Для Питона 3

> importlib <- import("importlib")
> importlib$reload(your_module)
person Louis    schedule 22.11.2019