Python virtualenv非常慢

时间:2013-09-24 03:24:49

标签: python django virtualenv

我正在使用Python 2.7.3开发Ubuntu 12.04 x64,我刚刚将一个Django 1.5.4站点移植到virtualenv 1.7.1.2。

但是,我注意到,从活动的virtualenv运行Python命令比使用系统的Python安装时要慢得多。例如。使用系统Python的runnig python manage.py validate持续约1秒,而在virtualenv环境中运行的同一命令持续约4秒。这是正常的吗?我错过了什么吗?使用Apache + virtualenv部署此站点时,我是否会遇到效率问题?

注意:当本地Django开发服务器运行时,我没有注意到使用该站点时的效率问题。它似乎只影响从virtualenv中的shell运行的python命令......这是真的吗?

UPDATE1:

这里有一个我实际得到的时间的例子:

enric@developer:~/Documentos/workspace/EurekaStart$ time python manage.py validate
0 errors found

real    0m1.049s
user    0m0.648s
sys     0m0.120s
enric@developer:~/Documentos/workspace/EurekaStart$ source env/bin/activate
(env)enric@developer:~/Documentos/workspace/EurekaStart$ time python manage.py validate
0 errors found

real    0m5.261s
user    0m0.968s
sys     0m1.032s

更新2:

我已经做了进一步测试并将virtualenv更新到最新版本1.10.1并且我注意到时间已经改善,但只是一个小的(在0.5s和1s之间)。我还尝试使用--system-site-packages标志创建env,时间要好得多,但仍然比使用系统的默认Python慢​​。以下是时间:

使用env创建而不使用system-site-packages

(env)enric@developer:~/Documentos/workspace/EurekaStart$ time python manage.py validate
0 errors found

real    0m4.648s
user    0m1.008s
sys     0m0.824s

使用env2创建的system-site-packages

(env2)enric@developer:~/Documentos/workspace/EurekaStart$ time python manage.py validate
0 errors found

real    0m1.921s
user    0m0.760s
sys     0m0.312s

请注意,没有任何环境的正常执行持续1秒(如update1中所述)。


我刚刚创建了与新安装的Ubuntu 12.04(live CD)中安装的完全相同的libs相同的virtualenv,一切都按预期工作!它甚至在这台新机器上运行得更快:在我的机器上0.6s而不是1.0。

有一点需要注意:如果我在真实机器中使用从新鲜Ubuntu创建的virtualenv,它运行速度与执行没有virtualenv的命令一样快,这实际上是预期的。但是,如果我使用从这台机器创建的virtualenvs,那么它们运行得很慢。

所以,我想系统中安装的库确实会影响virtualenv的创建方式。

现在,问题是... 有没有办法清除我的Ubuntu安装,以便能够创建高效的virtualenvs ?是否有任何已知的库可能会导致此问题? (系统中没有破损的包,因为我已经检查了这个。)

2 个答案:

答案 0 :(得分:9)

这主要适用于Vagrant驱动的virtualenvs,但我遇到了同样的问题:极慢的manage.py / django-admin.py (~10-15s。对于django-admin.py版本)。

我发现罪魁祸首是 vagrant / virtualbox ,特别是在共享文件夹上生成virtualenv

在非共享文件夹(例如〜/ .envs )上重新生成virtualenv为我解决了这个问题。

希望它有所帮助。

答案 1 :(得分:2)

我认为virtualenv的效率问题可能是由分配的硬盘分区类型引起的。在我的例子中,从NTFS分区运行virtualenv会导致它非常慢。但是,从Ext4分区运行具有完全相同的lib的virtualenv可以按预期工作。