我收到了以下文件
1 ./run.py
2 ./code/util.py
3 ./code/__init__.py
在util.py里面我有
def funA():
print 'Hello World !'
和里面./code/init.py我有
__all__=['util'];
from util import *
现在我在当前目录中打开python提示符(实际上是ipython),然后输入
from code import *
我得到的只是util模块
util module <module 'code.util' from 'code/util.pyc'>
我必须包含包名才能使用funA()。 我期望funA现在在我的命名空间中,我可以在没有包名称code.funA的情况下使用它。然而,事实并非如此,我想知道问题出在哪里。 我想我仍然对如何使用__ init __.py感到困惑。
答案 0 :(得分:1)
__all__
(作为documented)的目的是表明您希望仅其中列出的名称可通过from mymodule import *
获取。通过仅指定'util'
,您明确告诉您的程序包除了util
之外不会生成任何内容。如果您删除了__all__
,那么您在util
中导入的所有内容也将在code
中提供,如果您执行from code import *
,那么util
中的所有内容}也将可用。
这是否是一个好主意是另一回事。导入*
通常会导致混淆。