2013-09-24 2 views
2

Я работаю над Ubuntu 12.04 x64 с Python 2.7.3, а я просто портировал сайт Django 1.5.4 на virtualenv 1.7.1.2.Python virtualenv очень медленный

Однако я заметил, что команды Python намного медленнее, когда они запускаются из активного виртуального пользователя, чем при использовании установки Python в системе. Например. runnig python manage.py validate с системным Python длится ~ 1 с, тогда как та же самая команда, запускаемая внутри виртуальной среды, длится ~ 4 с. Это нормально? Я что-то упускаю? У меня будут проблемы с эффективностью при развертывании этого сайта с помощью Apache + virtualenv?

Примечание: Когда локальный сервер разработки Django работает, я не заметил проблем с эффективностью при использовании сайта. Кажется, это влияет только на команды python, запускаемые из оболочки внутри virtualenv ... Это правда?

Update1:

Вот вам пример раз я на самом деле получить:

[email protected]:~/Documentos/workspace/EurekaStart$ time python manage.py validate 
0 errors found 

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

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

Update 2:

Я сделал дальнейшее тестирование и обновляется virtualenv до последней версии 1.10.1, и я заметил, что времена раз улучшились, а просто литте (от 0,5 до 1 с). Я также попытался создать env с флагом --system-site-packages, и время намного лучше, но все же медленнее, чем использование Python по умолчанию для системы. Вот раз:

Использование env создан без использования system-site-packages:

(env)[email protected]:~/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)[email protected]:~/Documentos/workspace/EurekaStart$ time python manage.py validate 
0 errors found 

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

Просто к сведению, нормальное исполнение без какого-либо окр длится 1s (как указано в update1).


Я только что создал тот же virtualenv с точно такими же LIBS, установленные внутри из свежей Ubuntu 12.04 (живой компакт-диск) и все работает, как и ожидалось! Он даже работал быстрее на этой новой машине: 0,6 вместо 1,0 на моей машине.

Один интересный момент: если я использую virtualenv, созданный из нового Ubuntu на моей реальной машине, он выполняется так же быстро, как выполнение команды без virtualenv, что и есть на самом деле. Но, если я использую virtualenvs, созданные с этой машины, они работают очень медленно.

Итак, я полагаю, что установленные в системе libs действительно влияют на то, как создается virtualenv.

Теперь вопрос будет ... Есть ли способ очистить мою установку Ubuntu, чтобы иметь возможность создавать эффективные virtualenvs? Есть ли какие-либо известные lib, которые могут вызвать эту проблему? (В системе нет сломанных пакетов, поскольку я уже проверил это).

+3

Это не нормально. Можете ли вы запустить 'time python manage.py SOMECOMMAND' (заменяя SOMECOMMAND командой, которая не будет уничтожать вашу систему) внутри и снаружи venv? восприятие - убийца, и поэтому это смещение конформации, поэтому реальные числа - лучший инструмент для работы. – Tritium21

+0

@ Tritium21 Спасибо за ваш комментарий, я только что включил времена. – Caumons

+0

Какова точная команда, используемая для создания venv? вы указали питон? – Tritium21

ответ

2

Я думаю, что проблемы с эффективностью с virtualenv могут быть вызваны типом раздела жесткого диска, который он выделяет. В моем случае запуск virtualenv из раздела NTFS заставляет его работать очень медленно. Тем не менее, запуск virtualenv с точно такими же libs из раздела Ext4 работает, как ожидалось.

+0

Я использую virtualenv внутри vagrant на разделе Ext4, и у меня была та же проблема. с virtualenv: real 0m3.852s, без: real \t 0m0.030s – Erik

+2

Вы думаете, что у вас это плохо? реальные \t 7m10.014s пользователь \t 0m0.904s SYS \t 0m13.809s –

+0

@DylanMadisetti это впечатляет, что вы узнали, что это занимает 7 мин; Я бы предположил, что всего за 15 лет он никогда не будет импортирован и прекратил его ... – Mark

9

Это относится прежде всего к Vagrant-питанием virtualenvs, но я столкнулся с той же проблемой: крайне медленно manage.py/django-admin.py (~ 10-15s для django-admin.py версии.).

Я нашел виновника быть бродяга/VirtualBox, и, в частности генерации virtualenv на общую папку.

Регенерация виртуального канала в не общей папке (например, ~/.envs) решила проблему для меня.

Надеюсь, это поможет кому-то.

+0

В то время, когда я столкнулся с проблемой, я не использовал бродягу. Таким образом, кажется, что несколько случаев, когда virtualenv работает медленно. – Caumons

+0

Отлично! Это проблема с использованием virtualenvs на '' vagrant'': не создавайте их в общих папках !!! – Serafeim

Смежные вопросы