从__init__.py导入Python文件

时间:2009-07-29 15:29:27

标签: python import module

假设我有以下结构:

app/
  __init__.py
  foo/
    a.py
    b.py
    c.py
    __init__.py

a.py,b.py和c.py共享一些常见的导入(logging,os,re等)。是否可以从__init__.py文件导入这三个或四个常用模块,这样我就不必在每个文件中导入它们了?

编辑:我的目标是避免在每个文件中导入5-6个模块,这与性能原因无关。

3 个答案:

答案 0 :(得分:13)

您可以使用include.py等常见文件执行此操作,但这违反了推荐的做法,因为它涉及通配符导入。请考虑以下文件:

app/
    __init__.py
foo/
    a.py
    b.py
    c.py
    include.py <- put the includes here.
    __init__.py

现在,在a.py等中,请执行:

from include import *

如上所述,不推荐使用,因为不鼓励使用通配符。

答案 1 :(得分:11)

不,它们必须放在每个模块的命名空间中,所以你必须以某种方式导入它们(除非你将logging作为函数参数传递,这将是一种奇怪的做事方式,说至少)。

但模块只导入一次(然后放入abc命名空间),所以不要担心使用太多内存或其他东西那样的。

您当然可以将它们放入一个单独的模块中,然后将 导入每个abc,但这个单独的模块仍然会必须每次都进口。

答案 2 :(得分:6)

是的,但不要这样做。说真的,不要。但是,如果你仍然想知道如何做,它看起来像这样:

import __init__

re = __init__.re
logging = __init__.logging
os = __init__.os

我说不要这么做,不仅因为它太乱,没有意义,还因为你的包不是真的应该使用__init__.py。它是包初始化代码。