Python 在它之后获取当前模块';在sys.modules中被覆盖了吗?

Python 在它之后获取当前模块';在sys.modules中被覆盖了吗?,python,ipython,sys,ipdb,Python,Ipython,Sys,Ipdb,我尝试从命令行运行一个脚本: import ipdb def f(): pass import pickle pickle.dumps(f) 这当然是简化了的。实际上,我试图在多处理.Pool中使用f,因此需要对其进行pickle。对于ipython 5.3.0和ipdb 0.10.2,这将产生: PicklingError: Can't pickle <function f at 0x1071eaaa0>: it's not found as __main__.f Pickli

我尝试从命令行运行一个脚本:

import ipdb
def f(): pass
import pickle
pickle.dumps(f)
这当然是简化了的。实际上,我试图在
多处理.Pool
中使用
f
,因此需要对其进行pickle。对于ipython 5.3.0和ipdb 0.10.2,这将产生:

PicklingError: Can't pickle <function f at 0x1071eaaa0>: it's not found as __main__.f
PicklingError:无法pickle:找不到它作为\uuuu main\uuuu.f
我相信这是因为IPython正在覆盖所描述的
sys.modules['''\uuuu main\uuu']

我想解决这个问题。我的一个想法是用当前的模块替换
sys.modules['''''u____']
。我可以在导入ipdb之前获得此引用,但我希望避免这样做(因为涉及的原因超出了这个问题的范围)


sys.modules
中覆盖当前模块后,是否可以获取对该模块的引用?我知道我可以得到它的名字(在我的例子中是
\uuu main\uuu
),但我不知道如何得到它的值(除了通过查看
sys.modules
)。

也许一个更干净的解决办法是制作一个单独的模块?是的,我认为这会起作用。在我的例子中,我需要它是一个单独的文件,作为一个脚本从命令行运行。也许一个更干净的解决方法是制作一个单独的模块?是的,我认为这会起作用。在我的例子中,我需要它是作为脚本从命令行运行的单个文件。