5

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

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

注意:当本地 Django 开发服务器运行时,我在使用该站点时没有注意到效率问题。它似乎只影响从 virtualenv 内的 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.5s 到 1s 之间)。我还尝试使用--system-site-packages标志创建环境,时间要好得多,但仍然比使用系统的默认 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

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


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

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

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

现在,问题是......有什么方法可以清除我的 Ubuntu 安装以创建高效的 virtualenvs吗?是否有任何已知的库可能导致此问题?(系统中没有损坏的包,因为我已经检查过了)。

4

2 回答 2

13

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

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

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

希望它可以帮助某人。

于 2015-01-08T15:55:40.950 回答
3

我认为 virtualenv 的效率问题可能是由它分配的 HDD 分区类型引起的。就我而言,从 NTFS 分区运行 virtualenv 会导致它非常慢。但是,从 Ext4 分区运行具有完全相同库的 virtualenv 可以按预期工作。

于 2013-11-17T19:21:19.973 回答