Python 3.x Python3:pickle一个没有副作用的函数
我有一个项目,在模块Python 3.x Python3:pickle一个没有副作用的函数,python-3.x,pickle,dill,Python 3.x,Pickle,Dill,我有一个项目,在模块我的\u项目中有一个函数foo。我的\u函数。我想以一种不需要导入我的\u项目就可以从其他地方取消对该函数的picklefoo没有任何副作用,因此函数之外没有依赖项 我正在使用dill来picklefoo,但dill正在将其保存为,并在我尝试取消pickle时抱怨未知的我的项目模块 有什么解决方案吗?我通过从代码给定和空的globals字典中重新创建函数来解决这个问题 在/my_project/module.py中: 在my_项目中,在酸洗功能之前: 其他地方: dill无法
我的\u项目中有一个函数foo
。我的\u函数
。我想以一种不需要导入我的\u项目
就可以从其他地方取消对该函数的picklefoo
没有任何副作用,因此函数之外没有依赖项
我正在使用dill
来picklefoo
,但dill正在将其保存为
,并在我尝试取消pickle时抱怨未知的我的项目
模块
有什么解决方案吗?我通过从代码给定和空的
globals
字典中重新创建函数来解决这个问题
在/my_project/module.py中:
在my_项目中,在酸洗功能之前:
其他地方:
dill
无法处理对已卸载模块的函数引用。您可以安装模块。。。那就行了。或者,也可以使用dill
或dill.source
先保存模块,然后保存并存储函数。。。但最简单的方法是安装和导入模块。我不能破解这个函数,让它认为它在\uuuuuu main\uuuuuuu
中引用了吗?是的,我想你可以这么做。。。在特殊情况下,dill
在globals
中修改\uuu main\uuuu
的参考。它需要在(反)序列化时完成——这意味着,你更可能需要破解dill.Pickler
而不是你的函数。这是一个相关的问题:,我相信还有其他相关的问题。
def f(n):
return n+1
import dill
import types
import module
f = types.FunctionType(module.f.__code__,{})
with open("my_func.pkl", 'wb') as fs:
dill.dump(f, fs)
import dill
with open("my_func.pkl", 'rb') as fs:
f = dill.load(fs)