我有这个结构:
.
└── module
├── __init__.py
└── submodule
├── __init__.py
├── foo.py
└── bar.py
在module.submodule.__init__.py
我有这个:
import foo
import bar
在module.submodule.foo.py
我有这个:
import very_heavy_third_party_module as vhtpm
...
我想进口bar
而已,但我得到减缓foo
(让我们想象有一个丑陋的time.sleep(3)
两个foo
和module/__init__.py
)。
因此,我的目标是在不被模块其他部分拖慢的情况下将其写在下面:
from module.submodule.bar import saybar
saybar()
我怎么能只需要导入saybar
位于我的子模块bar
?
从做进口的唯一方法bar
,而无需运行foo
是删除import foo
从module.submodule.__init__.py
。这是因为当你在Python,所有这些模块中的顶级代码(或导入封装/模块__init__.py
,如果导入包)运行。当您运行from module.submodule.bar import saybar
,所有的顶级代码:
module.__init__.py
module.submodule.__init__.py
module.submodule.bar.py
运行。由于module.submodule.__init__.py
含有import foo
,foo
是进口及其所有的顶级代码(包括import very_heavy_third_party_module as vhtpm
)运行为好,导致增长放缓。
一些可能的解决方案是:
__init__.py
。这是一个常见的做法是假__init__.py
空的-如果那里面有一些功能,你可能要考虑将其移动到其自身的模块。一旦import
仅保留了这些行,您就可以删除它们,因为它们在命名空间方面没有区别。import vhtpm
在foo.py
从顶层向下(例如,进入多数民众赞成由别的东西叫做模块功能)。这不是很干净,但是如果您需要优化,可能对您有用。本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句