我试图将函数转储到一个文件中,以便在其他地方使用此文件/函数。我选择dill
而不是pickle
,因为我需要依赖项。但是,如果函数内部有导入,则dill
不起作用。例如:
def func():
import numpy
import dill
dill.settings['recurse'] = True
with open("test.pickle","wb") as f:
dill.dump(func,f)
当我重新启动并重新加载函数时,会出现此错误
import dill
func = dill.load(open("test.pickle"))
func()
---------------------------------------------------------------------------
ImportError Traceback (most recent call last)
<ipython-input> in <module>()
1 import dill
2 func = dill.load(open("test.pickle"))
----> 3 func()
<ipython-input> in func()
ImportError: __import__ not found
如果我使用pickle
来转储,那么这个例子是有效的,但是pickle
似乎不能递归地保存依赖项,所以我不能保存像def fun1(): return fun2()
这样的函数。
是否有一种方法可以转储同时具有导入和依赖项的函数?我觉得pickle
或dill
只做了一半
我是
dill
作者。我相信dill
也应该对你有用:recurse
设置意味着通过全局dict递归跟踪引用,但不存储整个全局dict。dill
的默认设置是在酸洗函数时存储所有全局dict。因此,recurse
可以使pickle变小,但也可能由于缺少引用而失败相关问题 更多 >
编程相关推荐