我正在使用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 ?是否有任何已知的库可能会导致此问题? (系统中没有破损的包,因为我已经检查了这个。)
答案 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可以按预期工作。