假设我有以下结构:
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个模块,这与性能原因无关。
答案 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
作为函数参数传递,这将是一种奇怪的做事方式,说至少)。
但模块只导入一次(然后放入a
,b
和c
命名空间),所以不要担心使用太多内存或其他东西那样的。
您当然可以将它们放入一个单独的模块中,然后将 导入每个a
,b
和c
,但这个单独的模块仍然会必须每次都进口。
答案 2 :(得分:6)
是的,但不要这样做。说真的,不要。但是,如果你仍然想知道如何做,它看起来像这样:
import __init__
re = __init__.re
logging = __init__.logging
os = __init__.os
我说不要这么做,不仅因为它太乱,没有意义,还因为你的包不是真的应该使用__init__.py
。它是包初始化代码。