Python3: pickle 一个没有副作用的函数
Python3: pickle a function without side effects
我有一个项目 foo
在模块 my_project.my_functions
中。我想以一种无需导入 my_project
即可从其他地方解开它的方式来腌制该函数。 foo
没有任何副作用,所以没有函数外的依赖。
我正在使用 dill
来 pickle foo
,但 dill 将其保存为 <function my_project.my_functions.foo>
,并在我尝试时抱怨未知的 my_project
模块解开它。
有什么解决办法吗?
我通过从给出的代码和空 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)
我有一个项目 foo
在模块 my_project.my_functions
中。我想以一种无需导入 my_project
即可从其他地方解开它的方式来腌制该函数。 foo
没有任何副作用,所以没有函数外的依赖。
我正在使用 dill
来 pickle foo
,但 dill 将其保存为 <function my_project.my_functions.foo>
,并在我尝试时抱怨未知的 my_project
模块解开它。
有什么解决办法吗?
我通过从给出的代码和空 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)