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

时间:2016-01-13 23:42:32

标签: python python-3.4 python-import

假设您创建了一个名为cron的Python包,它包含一个名为app的模块,该模块有一个名为foo的函数,可以将say_hello打印到控制台

假设您还创建了第二个名为Hello!的Python包,其中包含模块boss_appmainapp位于同一目录中,目录位于Python路径中。此外,boss_app文件都是空白的。结构是:

__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 *

1 个答案:

答案 0 :(得分:1)

import app

仅运行app/__init__.py并使其初始化的所有内容都可用作app.SOMENAME。如果您希望app.foo模块可用,则需要说import app.foo。这将加载模块。这种区别的一个常见例子可能是import os vs import os.path。仅仅因为您说import os,您就无法获得os.path个套餐的内容。

您不必将模块分解为软件包,但它有助于避免模块名称冲突。它也可能有助于在这些模块的用户的脑海中清楚地理解概念。