我的代码中约有25%依赖于模块:Traits,tvtk,......导入相当繁重。我的机器通常需要2秒钟(其他更多)。
我的模块按以下方式组织
mainmodule
|--submodule1
|--submodule2
|--subsubmodule1
|--subsubmodule2
|--submodule3
|--submodule4
|--subsubmodule1
|--subsubmodule2
在这些中,子模块1和子模块2使用Traits。这意味着75%的时间,如果我调用 import mainmodule ,我将不得不等待导入繁重的模块,但之后它们将不会被使用。
如何组织我的导入以便减少导入时间?
也许有办法做类似的事情:
import mainmodule
并且
mainmodule
|--submodule3
|--submodule4
|--subsubmodule1
|--subsubmodule2
只打电话:
import mainmodule.heavy
拥有一切
答案 0 :(得分:3)
你可以在函数/模块中放置这样的代码: -
def heavy():
global x
global y
import x, y
def mainmodule():
if heavy not in globals():
import heavy
实际上,这在同一个程序中不起作用,因为无法导入函数。此外,您需要检查全局变量中的字符串,而不是模块本身。所以,相反: -
def heavy():
global x
global y
import x, y
def mainmodule():
if 'x' not in globals() or 'y' not in globals():
heavy()
答案 1 :(得分:3)
这听起来像是您想要的一种方式,因此导入mainmodule
不会自动导入submodule1
和submodule2
,这需要很长时间才能加载。
submodule1
和submodule2
。或者将这些函数移动到一个名为mainmodule_heavy.py
的单独模块中。
(或者你可以hack the Python module system to load modules lazily。但是那种黑客往往会导致问题,而且对你的案子来说听起来没必要。)