Python3:pickle一个没有副作用的函数

时间:2018-04-13 16:18:39

标签: python-3.x pickle dill

我在模块foo中有一个带有函数my_project.my_functions的项目。我希望以一种我可以从其他地方解开它而不需要导入my_project的方式来挑选该函数。 foo没有任何副作用,因此函数外没有依赖项。

我正在使用dill来挑选foo,但是dill将其保存为<function my_project.my_functions.foo>,当我尝试取消它时,会抱怨未知的my_project模块

任何解决方案?

1 个答案:

答案 0 :(得分:1)

我通过从代码赋予和空globals字典重新创建函数来解决它。

在/my_project/module.py中:

def f(n):
    return n+1 

在my_project中,在挑选函数之前:

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)