如何在Reticulate中实现Python的from-import且不导入整个模块?
在Reticulate中实现Python的from-import语法(无需导入整个模块)
嘿,这个问题我刚好研究过!确实在Reticulate里可以实现类似Python from tensorflow import keras 这种只导入指定子模块/对象、不加载整个父模块的操作,你之前用的keras <- import('tensorflow')$keras 之所以会导入整个tensorflow,是因为它先完整加载了父模块,再从中提取子模块,本质上还是把整个模块都拉进来了。
正确的实现方式:使用import_from()函数
Reticulate专门提供了import_from()函数来模拟Python的from...import语法,它只会加载你指定的部分,不会导入整个父模块。举个例子:
library(reticulate) # 完全对应Python的 from tensorflow import keras keras <- import_from("tensorflow", "keras")
扩展用法示例
除了导入子模块,这个函数还支持Python里from...import的其他常见用法:
- 一次性导入多个对象:
# 对应Python的 from tensorflow.keras.layers import Dense, Dropout c(Dense, Dropout) %<-% import_from("tensorflow.keras.layers", c("Dense", "Dropout")) - 给导入的对象重命名:
# 对应Python的 from tensorflow import keras as ks ks <- import_from("tensorflow", "keras", alias = "ks")
为什么这个方法更高效?
和你之前用的import('tensorflow')$keras相比,import_from()不会把整个tensorflow模块加载到R环境中,它只会拉取你需要的子模块或对象,对于tensorflow这种体积庞大的模块来说,能显著减少内存占用,运行效率也会更高。
内容的提问来源于stack exchange,提问作者daniellga
相关产品推荐
相关产品推荐

