gpt4 book ai didi

Python:确定实际当前模块(不是 __main__)

转载 作者:太空狗 更新时间:2023-10-29 17:41:59 26 4
gpt4 key购买 nike

我正在尝试确定函数的实际当前模块(如从其他地方导入时所见),即使当前模块是“top level scripting environment__main__

这听起来像是一件奇怪的事情,但背景是我需要序列化一个函数并在另一台机器上反序列化它(包括参数),为此我需要确保正确的模块而不是 __main__ 是在反序列化之前导入(否则我会收到一条错误消息 AttributeError: 'module' object has no attribute my_fun)。

到目前为止,我已经尝试过 inspection :

import inspect
print inspect.getmodule(my_fun)

这给了我

<module '__main__' from 'example.py'>

当然。我也尝试使用 globals() 找到有用的东西,但运气不好。

我真正想要的是 <module 'example' from 'example.py'> 。我想一个 hacky 的方法是使用类似

的文件名来解析它
m_name = __main__.__file__.split("/")[-1].replace(".pyc","")

然后找到名称为 sys.modules[m_name] 的模块。

是否有更清洁/更好的方法来做到这一点?

编辑:在了解了 ipython 的“FakeModule”并进行了更多谷歌搜索之后,我遇到了 this post ,它准确地描述了我面临的问题,包括我目前的解决方案(明确导入当前模块 import current_module 并序列化 current_module.my_fun 而不是 my_fun ).我试图避免这种情况,因为对于我的包的用户来说这可能不直观。

最佳答案

我实际上遇到了同样的问题。

我用的是:

return os.path.splitext(os.path.basename(__main__.__file__))[0]

这实际上与您的“hack”相同。老实说,我认为这是最好的解决方案。

关于Python:确定实际当前模块(不是 __main__),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10746128/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com