首页 > 解决方案 > 从保存的引用中导入类

问题描述

给定在当前上下文中导入的 python 类,有没有办法保存对该类的可序列化(picklable)引用,以后可以在另一个 python 上下文中导入?

例如

首先保存参考。在这个例子中get_referenceimport_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 环境中。

我发现的一种简单方法是使用这篇文章中的函数来获取get_reference函数的路径,然后获取import referencedo eval(f"import {opt_reference}")。这似乎太 hacky 并且非常不安全(尽管在这种情况下我不关心安全性)。

有没有更好的方法来做到这一点?

标签: pythonpickle

解决方案


推荐阅读