При разработке сложного проекта неизбежно появляются несколько зависимых пакетов, возможно даже разрабатываемых независимо и без публикации в индексе пакетов 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 второго проекта есть к примеру строчки:
-
…
-
install_requires=['setuptools',
-
'zope.interface',
-
'zope.component',
-
'z3c.autoinclude',
-
'my.project1'
-
],
-
…
Последним в списке стоит зависимый пакет.
Находясь в каталоге 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 второго проекта:
-
-
[buildout]
-
develop = my.project1 .
-
parts = test
-
-
[test]
-
recipe = zc.recipe.testrunner
-
eggs = my.project2 [test]
Здесь приведена версия конфигурации buildout для генерации тестирующего скрипта. Обратите внимание на то, что опция develop содержит ссылку на зависимый пакет, который находится рядом в этом же каталоге и в конце строки пробел и точка. Точка указывает на текущий проект. Если вы делали зависимости на несколько проектов, то тут они должны быть перечислены через пробелы, я так полагаю слева направо, в соответствие с зависимостями (поправьте если это не так).
Собственно все, можно запускать скрипт собирающий наш buildout:
bin/buildout
Оставить комментарий