Python导入速度很慢 - Anaconda Python 2.7

3
我的Python导入语句变得非常缓慢。我在本地使用Anaconda包运行Python 2.7。导入模块后,我编写的代码运行非常快,只是导入需要很长时间。
例如,我运行了一个名为“tester.py”的文件,并使用以下代码:
import timeit

x = timeit.timeit('import numpy as np')
print 'imported numpy in %s seconds'%x

x = timeit.timeit('import pandas as pd')
print 'imported pandas in %s seconds'%x

x = timeit.timeit('from Tkinter import Frame,Tk, Label, Checkbutton')
print 'imported Tkinter in %s seconds'%x

x = timeit.timeit('from tkFileDialog import askopenfilenames, asksaveasfilename')
print 'imported tkFileDialog in %s seconds'%x

x = timeit.timeit('import tkMessageBox')
print 'imported tkMessageBox in %s seconds'%x

x = timeit.timeit('import os')
print 'imported os in %s seconds'%x

命令行输出为:

C:\Users\***\AppData\Local\Continuum\Anaconda>C:\Users\***\Desktop\tester.py
imported numpy in 5.22607264113 seconds
imported pandas in 13.7990192174 seconds
imported Tkinter in 3.95690550577 seconds
imported tkFileDialog in 3.62803133249 seconds
imported tkMessageBox in 1.50766849631 seconds
imported os in 1.87009742139 seconds

我该如何诊断正在发生的事情并/或加速导入?我不太确定从哪里开始...也许重新安装Anaconda?任何见解或想法都会受到高度赞赏。


我猜问题不是来自Python,而是你的电脑? 查看进程和内存,看看是否有任何东西在消耗你的资源。 - Cyrbil
感谢您的回复。通过资源监视器检查,大约使用了30%的内存(2.5GB / 8GB)...这会足以导致这样的延迟吗? - TKW
1
你的 sys.path 里有什么?我猜如果有一个或多个缓慢的网络路径,可能会导致导入速度变慢。 - zvone
我有Anaconda包的默认设置,再加上一些: C:\Users***\AppData\Local\Continuum\Anaconda\lib\site-packages\requests_kerberos-0.7.0-py2.7.egg C:\Users***\AppData\Local\Continuum\Anaconda\python27.zip C:\Users***\AppData\Local\Continuum\Anaconda\DLLsC:\Users***\AppData\Local\Continuum\Anaconda\lib C:\Users***\AppData\Local\Continuum\Anaconda\lib\plat-win C:\Users***\AppData\Local\Continuum\Anaconda\lib\lib-tkC:\Users***\AppData\Local\Continuum\Anaconda C:\Users***\AppData\Local\Continuum\Anaconda\lib\site-packages - TKW
以上的sys.path列表长度可能是长时间运行时间的源头吗?我非常感谢您的帮助和建议。 - TKW
显示剩余2条评论
1个回答

1
你使用timeit的方式不正确,应该传递number = 1,这样导入语句只会被执行一次。默认情况下,timeit将"number"设置为1000000。难怪要导入一个模块一百万次需要几秒钟时间。
话虽如此,Python的导入通常很慢,你可以在stackoverflow和其他在线资源上找到一些关于如何加速导入(惰性导入、预编译模块等)的好建议。

2
...但似乎不是在这个stackoverflow页面上。同意应该使用number=1,但实际上,在初始import后,随后的999999次迭代将只是对sys.modules进行闪电般快速的查找。 - jez

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接