我试图确定函数的实际当前模块(如果从别处导入的话),即使当前模块是“顶层脚本环境
这样做听起来可能听起来有点奇怪,但背景是,我需要将一个函数序列化,并解除它(包括参数)在另一台机器上的序列化(包括参数),为此,我需要确保正确的模块,在取消飞行前不会导入到 AttritateError:模块对象没有我的属性_fun
)。
到目前为止,我尝试了Insperction :
import inspect
print inspect.getmodule(my_fun)
这使我
<module __main__ from example.py >
当然了,我还试图找到一些有用的东西 使用 globals ()
< () , no luck.
我真正想要的是
m_name = __main__.__file__.split("/")[-1].replace(".pyc","")
然后查找模块的名称为 syss.modules[m_name]
。
是否有更清洁/更好的方法做到这一点?
EDIT:
After learning about ipython s "FakeModule" and a bit more googling, I came accross this post, which describes exactly the problem that I m facing, including my current solution to it (which is explicitly importing the current module import current_module
and serializing current_module.my_fun
instead of my_fun). I m trying to avoid this, as it might not be intuitive for the users of my package.