python - 从保存的引用中导入类
问题描述
给定在当前上下文中导入的 python 类,有没有办法保存对该类的可序列化(picklable)引用,以后可以在另一个 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 环境中。
我发现的一种简单方法是使用这篇文章中的函数来获取get_reference
函数的路径,然后获取import reference
do eval(f"import {opt_reference}")
。这似乎太 hacky 并且非常不安全(尽管在这种情况下我不关心安全性)。
有没有更好的方法来做到这一点?
解决方案
推荐阅读
- sql - 在 table1 中选择值、Group By、Sum 的存储过程,然后将这些值插入到 table2 中
- ios - 如何将 dateFormatter 值(例如 2019 年 7 月 7 日)从时间戳转换为 2019 年 7 月 7 日?
- python - 在 Python Pygame 中调用对象和传递变量不工作错误说变量未定义
- html - 自举对齐输入字段
- javascript - 如何将变量 js 发布到 Django
- javascript - 从匿名函数返回值时遇到问题
- antlr4 - 我可以让我的 ANTLR4 Lexer 从输入流中丢弃一个字符吗?
- mql4 - StringGetChar 和 CharToStr 不能互换
- javascript - 全局变量在 JQuery Ajax 成功函数中不受影响
- c++ - GNAT CE 2019 链接失败 Om OSX Mojave