组织重型蟒蛇进口

时间:2011-01-07 23:25:46

标签: python import project-organization

我的代码中约有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

拥有一切

2 个答案:

答案 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不会自动导入submodule1submodule2,这需要很长时间才能加载。

实际上,这很简单。您只能在需要它们的函数中导入submodule1submodule2。或者将这些函数移动到一个名为mainmodule_heavy.py的单独模块中。

(或者你可以hack the Python module system to load modules lazily。但是那种黑客往往会导致问题,而且对你的案子来说听起来没必要。)