无法在 pytest 测试中使用 pickled 函数

Can't use pickled function inside a pytest test

所以我有这种情况,我创建了一个 function 依赖于 pandas,然后我 pickle 然后重新加载并尝试 运行 并给出 errorpd 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