在sys.modules中覆盖后获取当前模块?

时间:2017-03-06 18:23:34

标签: python ipython sys ipdb

我有一个脚本,我试图从命令行运行:

import ipdb
def f(): pass
import pickle
pickle.dumps(f)

这当然是简化的。实际上,我试图在f中使用multiprocessing.Pool,因此需要腌制它。使用ipython 5.3.0和ipdb 0.10.2,可以得到:

PicklingError: Can't pickle <function f at 0x1071eaaa0>: it's not found as __main__.f

我相信这是因为IPython正如here所述覆盖sys.modules['__main__']

我想解决这个问题。我的一个想法是用当前模块替换sys.modules['__main__']。我可以在导入ipdb之前获得此引用,但是我想避免这种情况(出于相关原因,超出了本问题的范围)。

sys.modules中覆盖当前模块之后,是否可以获得对当前模块的引用?我看到我可以得到它的名字(我的情况为__main__),但我不知道如何获得它的价值(除了查看sys.modules)。

0 个答案:

没有答案