配置Python导入时间

有没有办法找出哪些进口在 Python中占用时间最长?查看python -m cProfile< script>的输出,它似乎不包含import语句(可以理解为可能存在巨大的依赖树).最初我认为它确实是因为我看到__import __()调用的行,但我认为这可能实际上是因为代码在某处显式调用它,只有import语句的玩具程序没有一行.

现在我只是使用:

start = time.time()
import <module>
print '%s / time: %f' % (<module>, time.time()-start)

在每个模块周围,但它不会递归地分析它以查看导入中的哪个导入可能会使时间膨胀.

最佳答案 正如danielu13的评论中所述,您真正想要分析的是导入此模块时在模块内执行的代码.

似乎cProfile包含在其输出中导入时执行的代码.它显示为< module>用于模块级代码.
许多包作为_​​_init__.py文件导入,因此gprof2dot显示__init __:23:< module> (行号可能不同),它不会告诉您文件来自哪个包.

使用cprofilev,您可以找出哪些文件(以及包)占用大部分时间.

一个旁注:在某些情况下,分析导入实际上是有意义的.在我的系统上,导入模块networkx(https://networkx.github.io/)需要1.7秒.

点赞