组织大量的 python 导入
我的代码大约 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
拥有一切
About 25% of my code depends on the modules: Traits, tvtk, ... which are quite heavy to import. It typically takes a good 2 seconds on my machine (and more on other).
My modules are organized as the following
mainmodule
|--submodule1
|--submodule2
|--subsubmodule1
|--subsubmodule2
|--submodule3
|--submodule4
|--subsubmodule1
|--subsubmodule2
In these, the submodule1 and submodule2 use Traits. That means 75% of the time, if I call import mainmodule, I will have to wait for the heavy modules to be imported but then they won't be used.
How do I organize my imports so that I can lower my import time?
Maybe there is a way to do something like:
import mainmodule
and have
mainmodule
|--submodule3
|--submodule4
|--subsubmodule1
|--subsubmodule2
And only call:
import mainmodule.heavy
to have everything
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
听起来您想要的是一种方法,以便导入
mainmodule
不会自动导入submodule1
和submodule2
,这需要很长时间才能加载。实际上,这很容易。您只能在需要它们的函数中导入
submodule1
和submodule2
。或者将这些函数移至名为mainmodule_heavy.py
的单独模块中。(或者您可以破解Python模块系统以延迟加载模块。但这种黑客往往会引起问题,而且对于您的情况来说这听起来没有必要。)
It sounds like what you want is a way so that importing
mainmodule
doesn't automatically importsubmodule1
andsubmodule2
, which take a long time to load.That's pretty easy, actually. You can import
submodule1
andsubmodule2
only in functions that need them. Or move those functions into a separate module calledmainmodule_heavy.py
.(Or you could hack the Python module system to load modules lazily. But that kind of hack tends to cause problems, and it sounds unnecessary for your case.)
您可以将这样的代码放入函数/模块中:-
实际上,这在同一个程序中不起作用,因为无法导入函数。另外,您需要检查全局变量中的字符串,而不是模块本身。所以,相反:-
You can put some code like this within a function / module:-
Actually, this wouldn't work within the same program, as a function cannot be imported. Also, you'd want to check for a string within globals, not the module itself. So, instead:-