无法在 pytest 测试中使用 pickled 函数
Can't use pickled function inside a pytest test
所以我有这种情况,我创建了一个 function
依赖于 pandas
,然后我 pickle
然后重新加载并尝试 运行 并给出 error
那 pd is not defined
:
def pandize(arg):
pd.DataFrame('a')
import dill
with open('pandize.pkl', 'wb') as f:
dill.dump(pandize, f)
with open('pandize.pkl', 'rb') as f:
p = dill.load(f)
p(1)
NameError: name 'pd' is not defined
之后我 import pandas as pd
代码被调用。
但我无法在 pytest
测试函数中复制此行为。即使我添加 import pandas as pd
我仍然得到 NameError
pd is not defined
。有什么想法吗?
正如 @MrBeanBremen 在评论中的链接问题中指出的那样,导入 __main__
然后在 __main__
中定义 pandas
使得技巧:
import pandas as pd
import __main__
__main__.pd = pd
with open('pandize.pkl', 'rb') as f:
p = dill.load(f)
p(1)
此设置不会再导致测试失败并显示 NameError
。
所以我有这种情况,我创建了一个 function
依赖于 pandas
,然后我 pickle
然后重新加载并尝试 运行 并给出 error
那 pd is not defined
:
def pandize(arg):
pd.DataFrame('a')
import dill
with open('pandize.pkl', 'wb') as f:
dill.dump(pandize, f)
with open('pandize.pkl', 'rb') as f:
p = dill.load(f)
p(1)
NameError: name 'pd' is not defined
之后我 import pandas as pd
代码被调用。
但我无法在 pytest
测试函数中复制此行为。即使我添加 import pandas as pd
我仍然得到 NameError
pd is not defined
。有什么想法吗?
正如 @MrBeanBremen 在评论中的链接问题中指出的那样,导入 __main__
然后在 __main__
中定义 pandas
使得技巧:
import pandas as pd
import __main__
__main__.pd = pd
with open('pandize.pkl', 'rb') as f:
p = dill.load(f)
p(1)
此设置不会再导致测试失败并显示 NameError
。