【问题标题】:python package import modules using __init__.pypython包导入模块使用__init__.py
【发布时间】:2013-04-21 18:39:09
【问题描述】:

我做了一个如下结构的包:

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 *

【问题讨论】:

  • 我看不出让from package1 import * 表现得像from numpy import * 会有什么好处。
  • 好吧,我为数值模拟制作了这个包,所以每当我使用这个包时,我都需要 numpy.这就是我想要它的原因。
  • 只是我不喜欢导入混淆另一个导入的想法,但我可能错了。

标签: python python-2.7 module package


【解决方案1】:

如果你想要这个,你的__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 内容,它只添加三个输入字符,但可以防止不同模块之间的名称冲突。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2021-11-08
      • 2016-06-14
      • 1970-01-01
      • 2013-07-29
      • 2018-10-27
      • 1970-01-01
      • 2021-09-13
      • 1970-01-01
      • 2015-07-30
      相关资源
      最近更新 更多