16.03

Управление зависимостями в Django-проекте

Типичный django-проект представляет собой набор приложений и как правило не имеет "серьезного" кода. Большинство приложений используются в других проектах без изменений. Часто в README к django приложений пишут "скопируйте папку super_app в папку проекта". Эта операция имеет смысл только если вы собираетесь в дальнейшем серьезно изменить код данного приложения. Иначе же лучше устанавливать приложения как обычные пакеты расширений python.

Про установку django-приложений в систему мы говорили в прошлый раз, ниже пойдет речь об управлении зависимостями проекта и входящих в него приложений.

Для автоматизации разрешения зависимостей приложения достаточно создать его дистрибутив и оформить зависимости в setup.py дистрибутива. За это отвечает аргумент install_requires функции setup. Рассмотрим пример:

from setuptools import setup

setup(name='django-super-app',
version='1.0',
packages=['super_app'],
zip_safe=False,
install_requires=['app1',
'app2>=1.1',
'app3==0.1.1'],
)

В примере показано, что приложение django-supper-app имеет зависимости от приложений app1, app2, app3. При чем для корректной работы приложения версия app1 не важна, подойдет любая. Версия app2 должна быть не ниже 1.1, а необходимая версия app3 должна быть равно исключительно 0.1.1.

Если в приложение необходимо вносить изменения (дорабатывать), то установить его можно командой:

python setup.py develop

Эта команда вместо копирования кода приложения создаст ссылку на папку, в которой находится его код. Если у приложения будет изменен файл setup.py, то его необходимо переустановить для обновления в системе информации о нем.

Для production-хостинга на котором запущен один проект этого будет достаточно, но если необходима одновременная работа большего числа проектов (на машине разработчика или тестовом сервере) возможны конфликты между их зависимостимя. Более того, для корректной работы разных проектов могут требоваться разные версии одинаковых приложений. Возможно несколько варианта решения данной проблемы:

  1. манипулирование sys.path - установка приложений, относящихся к разным проектам в соответсвующие этим проектам папки и добавление этих папок в sys.path в конфиге проекта;
  2. использование buildout - более продвинутый предыдущий вариант;
  3. установка python в отдельную папку для каждого проекта и установка туда необходимых библиотек;
  4. создание для каждого проекта собственного виртуального окружения и установка туда зависимостей.

Первый вариант самый простой и не нуждается в комментариях. Второй заслуживает отдельной статьи, о нем поговорим позже. Третий не имеет ни каких объективным приемуществ перед другими. Далее поговорим про четвертый.

Virtualenv

Для создания виртуального окружения python служит пакет virtualenv. С его помощью можно разворачивать проекты в независимых окружениях.

easy_install virtualenv # устанавливаем virtualenv

virtualenv my_project_env # создаем окружение для проекта. окружение создастся в текущей папке и будет размещено в папке my_project_env
cd my_project_env # переходим в папку проекта
source bin/active # активация окружения

deactivate # деактивация окружения

После активации окружения все команды связанные с python будут выполняться с версией, установленной в это окружение. Например, установка дополнительных библиотек расширений python.

С помощью virtualenv можно создать окружение полностью не зависимое от системного, используя опцию --no-site-packages при создании окружения.

Подробней про virtualenv смотрите:

 

PIP

Для управления пакетами в окружении можно использовать менеджер пакетов PIP. Основное отличие PIP от easy_install в возможности получать дистрибутивы пакетов из уделенных репозиториев различных систем контроля версий.

pip install django
pip install -e svn+http://code.djangoproject.com/svn/django/trunk#egg=django

PIP поддерживает virtualenv и можно управлять пакетами в виртуальном окружение, не активируя его, достаточно указать его местонахождение с помощью опции -E.

pip install -E ./my_project_env flup

Существует возможножность получить список установленных пакетов и их версии, сохранить эту информацию в файл и в дальнейшем использовать для развертывания проекта в другом окружении

pip freeze > project.req   # сохранение зависимостей в файл
pip install -r project.req # установка библиотек из файла с зависимостями

При установке и сохранении зависимостей имя библиотек задается так же как в опции install_requires в файлах setup.py.

Подробней по работе с pip смотрите

Раздел: Django Тэги: pip, setup.py, virtualenv

Коментарии

#116.07.2012, 06:41 lahgkamnb пишет:

If you do http://www.cheapshoesen.com - retro jordan cheapwind up trying on shoes, be sure you stop later inside the day. Since the days continue for making his feet more in proportions than they have hours morning or early afternoon. If you try on shoes too early chances are you'll find yourself getting a pair that feels too small. Make sure that you be sure you try the shoes with the exact same http://www.cheapshoesen.com - retro jordan shopstyle of socks you’ll be wearing while using the shoes. For example, you will not desire to wear athletic socks Authentic Jordans Retro 7 Wholesale with sports shoes or nylons using a set of two winter boots.

#208.09.2012, 00:57 ApaskmipArisH пишет:

Dealer Burrell loves montblanc pen gadgets, snorkeling. Last of all he's gets most his inspiration from following a New york rangers icehockey game positioned at the stadium. Aberdeen-born Burrell Karol is addicted to montblanc pen culture, collecting artwork. Lastly he's enthralled by spending time with his honey. <a href=http://erreh6y5.fotopages.com/?entry=5656600>Mont Blanc Ball Pen Refill M</a> ,Lafayette-born and raised Burrell Karol is fully addicted to montblanc pen sport fishing, embroidery. Lastly, he is empowered by checking out and heading for new locations and nations around the world like Hatzor. Taxonomist Burrell prefers montblanc pen cinema, hunting. He gets stimulated by traveling by air, checking out many different locations particularly to Mali. ,<a href=http://blog.cordacord.com/article.php?type=blog&cid=4&itemid=41155>Kaweco Sport Fountain Pen</a>

#325.01.2015, 22:26 asasa пишет:

rehdrt esgserg argsg

Оставьте комментарий

© 2010 Алексей Камедов

При копировании материалов блога ссылка на источник обязательна.