Python 中奇怪的模块双重导入

Strange double import of module in Python

运行 https://github.com/Natureshadow/muris 处提供的代码揭示了 Python 中一种我不理解的奇怪行为。

代码可以 运行 通过将 src/ 放在 PYTHONPATH 和 运行ning src/muris/init.py.

发生的事情是 src/muris/init.py 中的代码被执行了两次,就好像它是从代码的其他部分包含的一样,但是它不是。

使用 Python 跟踪模块进行跟踪还显示 muris.modules.adjektive 被导入了两次。

为什么会这样?

解释器执行的Python脚本没有加载到模块系统中。例子中,主脚本也是顶层init.py。这在导入任何子模块时重新执行。

所有仅在启动时 运行 的代码都必须用

包围
if __name__ == '__main__':