簡體   English   中英

如何在Python中單獨導入子模塊?

[英]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放慢了速度(讓我們想象foomodule/__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 foofoo是進口和其所有的頂級代碼(包括import very_heavy_third_party_module as vhtpm )運行為好,導致增長放緩。

一些可能的解決方案是:

  • __init__.py移出盡可能多的代碼。 __init__.py留空是常見的做法 - 如果有一些功能,您可能需要考慮將其移動到自己的模塊。 一旦import行是唯一剩余的,您可以刪除它們,因為它們對命名空間沒有任何影響。
  • 重新定位import vhtpmfoo.py從頂層(例如,進入多數民眾贊成通過一些模塊中的其他調用的函數)下降。 這不是很干凈,但如果您需要優化,可能對您有用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM