Python 检查我的模块是否已导入

Python 检查我的模块是否已导入,python,Python,我想在导入模块本身时触发模块内部的函数 从我的测试来看,我似乎可以检查\uuuu name\uuuuuu是否不是\uuuu main\uuuuuu,并将其用作解决方案;但我想知道是否有更好的方法来使用某种导入钩子 if __name__ != '__main__': # I was imported ... 我想修改模块中存在的一个对象,只修改一次 我在这方面取得了成功;但我想知道是否有其他方法来解决这个问题 if __name__ == '__main__': exa

我想在导入模块本身时触发模块内部的函数

从我的测试来看,我似乎可以检查
\uuuu name\uuuuuu
是否不是
\uuuu main\uuuuuu
,并将其用作解决方案;但我想知道是否有更好的方法来使用某种导入钩子

if __name__ != '__main__':
    # I was imported
    ...
我想修改模块中存在的一个对象,只修改一次

我在这方面取得了成功;但我想知道是否有其他方法来解决这个问题

if __name__ == '__main__':
    example = 0
else:
    example = 1

Python在导入时运行一次顶级逻辑。示例可以在stdlibhashlib实现中找到(github目前已关闭)

请注意,对于条件导入和从第57行开始的顶级行,使用了
try…(除了

这些在导入时创建一次,而不是后续调用。它以这种方式工作的部分原因是模块是一个对象并存储在中


编辑:为了澄清,您可以使用类似的模块,但这是一条疯狂之路,因为它可能会使单元测试和调试变得痛苦,如果不是不可能的话。

您希望每次导入时都会发生这种情况,还是每个解释器第一次都会发生这种情况?可能重复@limbo该问题的观点不正确;我想从模块的角度来看它。@user2357112我想修改模块中存在的一个对象,以便导入它;并且只修改一次。顶级逻辑在导入时运行一次。各种stdlib包都有在导入时生成的方便助手。我相信re、rand和os会这样做。谢谢你的回答;我认为我的问题不够具体。我已经对它进行了修改,希望能更彻底地了解我所寻找的内容。@jacob Python就是这样做的,特别是在测试和单元测试或实现_umain __;的应用程序等情况下,或者我在你的问题中遗漏了其他东西吗?@jacob如果它看起来很愚蠢但有效,并且有人能够理解它的作用,那么它可能仍然很愚蠢但有效。
57 __always_supported = ('md5', 'sha1', 'sha224', 'sha256', 'sha384', 'sha512')
58 
59 algorithms_guaranteed = set(__always_supported)
60 algorithms_available = set(__always_supported)