Зависимости на локальные проекты в zc.buildout

Опубликовано Fal'K°: 01.07.2008 в 21:22

При разработке сложного проекта неизбежно появляются несколько зависимых пакетов, возможно даже разрабатываемых независимо и без публикации в индексе пакетов PyPi. Возникает необходимость разрешении зависимостей при построении конфигурации buildout. Например, если вы хотите собрать тестирующий скрипт из рецепта zc.recipe.testrunner для своего пакета, который в свою очередь зависит от других. Все это вы отразили в файле setup.py вашего проекта, но построить buildout не получается, т.к. генератору неизвестно откуда брать зависимые пакеты.

Рассмотрим как это можно сделать не прибегая к публикации зависимых пакетов в индексе PyPi. Далее подразумевается, что второй проект зависит от первого и что проекты уже сконфигурированы для использования buildout, как это делается можно прочесть здесь.

Итак, имеем два проекта:

|-- my.project1
       |--src
           |-- my
                |-- project1
                       ...
       |-- buildout.cfg
       |-- setup.py

и

|-- my.project2
       |--src
            |-- my
                |-- project2
                       ...
       |-- buildout.cfg
       |-- setup.py

В svn репозитории каталог my.project1 соответствует:

http://svn.server/rep/my.project1/trunk

Аналогично для второго проекта.

В setup.py второго проекта есть к примеру строчки:

  1. install_requires=['setuptools',
  2. 'zope.interface',
  3. 'zope.component',
  4. 'z3c.autoinclude',
  5. 'my.project1'
  6. ],

Последним в списке стоит зависимый пакет.

Находясь в каталоге my.project2 выполняем следующие команды:

svn co http://svn.server/rep/my.project1/trunk my.project1
Первый проект выгрузится в поддиректорию my.project1

svn propedit svn:externals .
В этой команде в конце строки стоит пробел и точка, это означает, что мы хотим редактировать свойство svn:externals текущей директории.

Откроется редактор, где надо ввести строку:
my.project1 http://svn.server/rep/my.project1/trunk

Строк может быть несколько, для всех локальных зависимостей вашего проекта. Сохраняем изменения и выполняем команду:
svn up

Внешние ссылки настроены, в каталоге my.project2 рядом с каталогом исходников src теперь есть зависимый пакет my.project1, который будет автоматически поддерживаться svn в актуальном виде по ссылке на реальное местоположение в репозитории.

Осталось только поправить файл buildout.cfg второго проекта:

  1.  
  2. [buildout]
  3. develop = my.project1 .
  4. parts = test
  5.  
  6. [test]
  7. recipe = zc.recipe.testrunner
  8. eggs = my.project2 [test]

Здесь приведена версия конфигурации buildout для генерации тестирующего скрипта. Обратите внимание на то, что опция develop содержит ссылку на зависимый пакет, который находится рядом в этом же каталоге и в конце строки пробел и точка. Точка указывает на текущий проект. Если вы делали зависимости на несколько проектов, то тут они должны быть перечислены через пробелы, я так полагаю слева направо, в соответствие с зависимостями (поправьте если это не так).

Собственно все, можно запускать скрипт собирающий наш buildout:
bin/buildout

Комментариев еще нет

Ваш комментарий будет первым!

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

Вход по OpenID

Стандартный вход

Опции:

Размер

Цвета