我正在使用Python 2.7.3开发Ubuntu 12.04 x64,我刚刚将Django 1.5.4站点移植到virtualenv 1.7.1.2。
但是,我注意到Python命令从活动的virtualenv运行时比使用系统的Python安装时慢得多。 例如,使用系统的 Python 的 runnig python manage.py validate
持续 ~1 秒,而在 virtualenv 环境中运行的相同命令持续 ~4 秒。这正常吗?我错过了什么吗?使用 Apache + virtualenv 部署此站点时,我会遇到效率问题吗?
注意:当本地 Django 开发服务器运行时,我在使用该站点时没有注意到效率问题。它似乎只影响从虚拟环境中的 shell 运行的 python 命令......这是真的吗?
更新1:
这里有一个我实际得到的时间的例子:
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.5 秒到 1 秒之间)。我还尝试使用 --system-site-packages
标志创建 env,时间要好得多,但仍然比使用系统的默认 Python 慢。以下是时间:
使用不使用system-site-packages
创建的env
:
(env)enric@developer:~/Documentos/workspace/EurekaStart$ time python manage.py validate
0 errors found
real 0m4.648s
user 0m1.008s
sys 0m0.824s
使用system-site-packages
创建的env2
:
(env2)enric@developer:~/Documentos/workspace/EurekaStart$ time python manage.py validate
0 errors found
real 0m1.921s
user 0m0.760s
sys 0m0.312s
请注意,没有任何 env 的正常执行持续 1 秒(如 update1 中所述)。
我刚刚从全新的 Ubuntu 12.04(live CD)创建了相同的 virtualenv,其中包含完全相同的库,一切都按预期工作!它甚至在这台新机器上运行得更快:0.6 秒而不是我的机器中的 1.0 秒。
需要注意的有趣一点是:如果我在我的真实机器中使用从新 Ubuntu 创建的 virtualenv,它的运行速度与在没有 virtualenv 的情况下执行命令一样快,这是实际预期的。但是,如果我使用从这台机器创建的虚拟环境,那么它们的运行速度会非常慢。
所以,我想系统中安装的库确实会影响虚拟环境的创建方式。
现在,问题是...有没有办法清除我的 Ubuntu 安装以便能够创建高效的虚拟环境?是否有任何已知的库可能导致此问题?(系统中没有损坏的软件包,因为我已经检查过了)。
这主要适用于 Vagrant 驱动的 virtualenvs,但我遇到了同样的问题:manage.py/django-admin.py 非常慢(django-admin.py 版本~10-15 秒)。
我发现罪魁祸首是vagrant/virtualbox,特别是在共享文件夹上生成virtualenv。
在非共享文件夹(如~/.envs)上重新生成虚拟环境为我解决了这个问题。
希望它对某人有所帮助。
我认为virtualenv的效率问题可能是由它分配的HDD分区类型引起的。就我而言,从NTFS分区运行virtualenv会导致它非常慢。但是,运行具有 Ext4 分区完全相同库的 virtualenv 按预期工作。