python包使用__init__.py导入模块

时间:2013-04-27 19:13:48

标签: python python-2.7 module package

我用以下结构制作了一个包:

test.py
pakcage1/
    __init__.py
    module1.py
    module2.py

test.py文件中,带代码

from package1 import *

我想要它做的是

from numpy import *
from module1 import *
from module2 import *

我应该在__init__.py文件中写什么来实现这一目标?

目前在我的__init__.py文件中

from numpy import *
__all__ = ['module1','module2']

这并没有给我我想要的东西。通过这种方式,numpy根本不会导入,模块将导入为

import module1

而不是

from module1 import *

2 个答案:

答案 0 :(得分:4)

如果您需要,__init__.py应该包含您想要的内容:

from numpy import *
from module1 import *
from module2 import *

执行from package import *时,会导入包__init__.py中定义的所有名称。

请注意,如果您导入的模块之间存在名称冲突,这可能会变得很尴尬。如果您只是想方便地访问这些模块中的函数,我建议使用类似的东西:

import numpy as np
import module1 as m1
import module2 as m2

即,导入模块(不是它们的内容),但是使用较短的名称。然后你仍然可以使用类似np.add的东西访问numpy东西,它只添加三个字符的输入,但可以防止不同模块之间的名称冲突。

答案 1 :(得分:2)

我是第二个BrenBarn的建议,但是要注意,使用from x import将所有内容导入一个命名空间通常是一个坏主意,除非您确定不会有任何冲突的名称。

我认为使用import package.module仍然更安全,但它确实需要额外的击键。