2

我的代码中大约 25% 依赖于模块:Traits、tvtk 等,这些模块导入起来非常繁重。在我的机器上通常需要 2 秒钟(在其他机器上需要更多时间)。

我的模块组织如下

mainmodule
|--submodule1
|--submodule2
   |--subsubmodule1
   |--subsubmodule2
|--submodule3
|--submodule4
   |--subsubmodule1
   |--subsubmodule2

其中,submodule1 和 submodule2 使用 Traits。这意味着 75% 的情况下,如果我调用import mainmodule,我将不得不等待重模块被导入,但随后它们将不会被使用。

如何组织导入以缩短导入时间?

也许有一种方法可以做类似的事情:

import mainmodule

并且有

mainmodule
|--submodule3
|--submodule4
   |--subsubmodule1
   |--subsubmodule2

并且只调用:

import mainmodule.heavy

拥有一切

4

2 回答 2

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()
于 2011-01-07T23:42:39.010 回答
3

听起来您想要的是一种方法,使导入mainmodule不会自动导入submodule1and submodule2,这需要很长时间才能加载。

实际上,这很容易。您可以仅在需要它们的函数中submodule1导入。submodule2或者将这些函数移到一个名为mainmodule_heavy.py.

(或者您可以破解 Python 模块系统以延迟加载模块。但是这种破解往往会导致问题,而且这听起来对您的情况来说是不必要的。)

于 2011-01-08T00:19:46.393 回答