使用__init__从其他文件导入python函数

时间:2014-06-17 05:48:05

标签: python import package init

我收到了以下文件

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感到困惑。

1 个答案:

答案 0 :(得分:1)

__all__(作为documented)的目的是表明您希望其中列出的名称可通过from mymodule import *获取。通过仅指定'util',您明确告诉您的程序包除了util之外不会生成任何内容。如果您删除了__all__,那么您在util中导入的所有内容也将在code中提供,如果您执行from code import *,那么util中的所有内容}也将可用。

这是否是一个好主意是另一回事。导入*通常会导致混淆。