我什么时候需要修改 Python __init__ 文件?

When do I need to modify a Python __init__ file?

假设您创建了一个名为 app 的 Python 包,它包含一个名为 foo 的模块,该模块具有一个名为 say_hello 的函数,它打印出 Hello! 到控制台。

假设您还创建了另一个名为 boss_app 的 Python 包,它有一个模块 mainappboss_app在同一个目录下,目录在Python路径下。此外,__init__ 文件都是空白的。结构是:

app
    __init__.py
    foo.py
boss_app
    __init__.py
    main.py

我想将 app 导入 boss_app.main 以便我可以调用 app.foo.say_hello.

我使用这个命令:

import app

app.foo.say_hello()

我希望在控制台中看到:

>>>> Hello!

相反,我得到的行为是 app 被导入 它无法访问 foo.

我想到的解决方案是修改app.__init__,使其包含以下命令:

from .foo import *

现在我得到了预期的行为。

如果某个包要从外部包导入,是否总是需要为该包定制 __init__

import app

仅运行 app/__init__.py 并使其初始化的所有内容都可用作 app.SOMENAME。如果你想让 app.foo 模块可用,你需要说 import app.foo。这将加载模块。这种区别的一个常见示例可能是 import osimport os.path。仅仅因为你说 import os,你将无法获得 os.path 包的内容。

您不必将模块分解成包,但这有助于避免 module-name 冲突。它还可能有助于使这些模块的用户头脑中的概念保持清晰。