【发布时间】:2015-01-08 23:55:40
【问题描述】:
我正在使用 Python 2.7.3 开发 Ubuntu 12.04 x64,我刚刚将一个 Django 1.5.4 站点移植到 virtualenv 1.7.1.2。
但是,我注意到从活动的 virtualenv 运行 Python 命令比使用系统的 Python 安装时要慢得多。例如。使用系统的 Python 运行 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.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.6 秒而不是我的机器上的 1.0。
需要注意的一个有趣的点是:如果我在我的真机上使用从新的 Ubuntu 创建的 virtualenv,它的运行速度与在没有 virtualenv 的情况下执行命令一样快,这是实际预期的。但是,如果我使用从这台机器创建的 virtualenvs,那么它们会运行得很慢。
所以,我猜系统中安装的库确实会影响 virtualenv 的创建方式。
现在,问题是...... 有什么方法可以清除我的 Ubuntu 安装以创建高效的虚拟环境?是否有任何已知的库可能导致此问题? (系统中没有损坏的包,我已经检查过了)。
【问题讨论】:
-
这不正常。你能在 venv 内外运行
time python manage.py SOMECOMMAND(用不会破坏系统的命令替换 SOMECOMMAND)吗?感知是杀手,构象偏差也是如此,所以实数是一个更好的工具。 -
@Tritium21 感谢您的评论,我刚刚包含了时间。
-
用于创建 venv 的确切命令是什么?你指定了python吗?
-
@Tritium21 我使用了命令
virtualenv env,因为在此版本中--no-site-packages已弃用 -
有点笨拙,但尝试
strace -o strace.log -tt python manage.py validate为每个virtualenv 并对生成的日志做一些粗略的比较。在搜索导入时,可能会做更多的stat调用。
标签: python django virtualenv