[英]How to import a submodule alone in Python?
我有這個結構:
.
└── 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
放慢了速度(讓我們想象foo
和module/__init__.py
有一個丑陋的time.sleep(3)
)。
所以我的目標是在下面寫下這個,而不會被模塊的其他部分放慢速度:
from module.submodule.bar import saybar
saybar()
我怎樣才能導入位於子模塊bar
saybar
?
在不運行foo
情況下從bar
導入的唯一方法是從module.submodule.__init__.py
刪除import foo
。 這是因為當您在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
從頂層(例如,進入多數民眾贊成通過一些模塊中的其他調用的函數)下降。 這不是很干凈,但如果您需要優化,可能對您有用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.