给定在当前上下文中导入的python类,是否可以保存对该类的可序列化(可拾取)引用,该引用可稍后在另一个python上下文中导入?
例如
首先保存参考。在此示例中,get_reference
和import_reference
是我希望实现的功能。
import pickle
from torch.optim import SGD
sgd = SGD()
# ... do work ...
opt_reference = get_reference(sgd.__class__)
with open('SGD_ref.pkl', 'wb') as fp:
pickle.dump(opt_reference, fp)
然后导入参考
import pickle
with open('SGD.pkl', 'rb') as fp:
opt_reference = pickle.load(fp)
SGD = import_reference(opt_reference)
sgd = SGD()
我不希望保存SGD函数本身的代码或实现,因为它也自行导入了一些东西。我假设要保存其引用的模块已类似安装并导入到将在其中使用的每个python环境中。
我发现一种简单的方法是使用this post中的函数来获取get_reference
函数的路径,然后为import reference
执行eval(f"import {opt_reference}")
。这似乎太骇人而且非常不安全(尽管在这种情况下我并不关心安全性。)
还有更好的方法吗?