Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x Python3:pickle一个没有副作用的函数_Python 3.x_Pickle_Dill - Fatal编程技术网

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项目
就可以从其他地方取消对该函数的pickle
foo
没有任何副作用,因此函数之外没有依赖项

我正在使用
dill
来pickle
foo
,但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)