Персональные инструменты
Вы здесь: Главная Документация Руководства Управление проектом с помощью buildout Установка сторонних продуктов

Установка сторонних продуктов

Автор: Ирина Бессарабова Последнее изменение: 2010-09-25 22:07

Как устанавливать новые пакеты

Способ установки сторонних продуктов зависит от того, является ли пакет "яйцом" или традиционным Zope 2 продуктом.

Установка яиц

Пока релиз пакета есть на PyPi или еще где-нибудь, buildout может скачать и установить его, включая любые явно указанные зависимости. Просто перечислите егг-пакет и возможно его версию (в противном случае вы получите последнюю доступную версию) в опции eggs: 

[buildout]
...
eggs = 
    elementtree
    borg.project>=1.0b1,<2.0dev

Если вы хотите, чтобы buildout искал в отличном от PyPi месте, вы можете добавить URL по которому можно загрузить пакет в find-links. Фактически, у нас уже есть пример этого: elementree может быть найден на http://effbot.org/downloads, а не в PyPi. Итак, у нас есть:

[buildout]
...

find-links =
    http://dist.plone.org
    http://download.zope.org/ppix/
    http://download.zope.org/distribution/
    http://effbot.org/downloads

eggs =
    elementtree

Мы также перечислили несколько мест загрузки Zope и Plone яиц.

Мы снова перезапускаем buildout для вступления изменений в силу:

$ ./bin/buildout

Егг-пакеты в разработке

Если ваш пакет еще не перешел в стадию релиза, или вы хотите отслеживать его в Subversion, сделайте чекаут в директрию src/. Убедитесь, что вы загрузили полностью пакет, включая файл setup.py в корне.  Например, чтобы получить последнюю версию plone.portlets нужно:

$ cd src
$ svn co https://svn.plone.org/svn/plone/plone.portlets/trunk plone.portlets

Потом добавьте следующее в buildout.cfg:

[buildout]
...
eggs =
    ...
    plone.portlets

develop =
    src/plone.portlets

Заметьте, что:

  • Опция develop содержит относительный путь к месту, где находится исходный код егг-пакета. Buildout ожидает найти подходящий файл setup.py в этой директории.
  • Егг-пакеты в разработке всегда имеют приоритет над обычными егг-пакетами.
  • Чтобы пакет был установлен, вам по-прежнему надо добавить его имя в опцию egg.
  • При переопределении егг-пакета, поставляемого с Plone, вам может понадобиться указать его в секции eggs части [plone]:
[buildout]
...
develop =
    src/plone.portlets

...

[plone]
recipe = plone.recipe.plone
eggs = 
    plone.portlets

Это нужно, так как в plone.recipe.plone явно определены версии используемых пакетов для обеспечения правильной работы Plone.

Рецепты buildout (такие как plone.recipe.plone) распространяются в виде егг-пакетов. Вы можете использовать a development egg of a recipe перечислив его в опции develop. Нет необходимости указывать его явно в опции eggs, так как на него ссылается опция recipe соответствующей части.   

Установка традиционного Zope 2 продукта

Распаковка пакета в папку products внутри buildout - это самый простой способ поставить традиционный Zope 2 продукт. 

Однако, этот подход затрудняет распространение вашего проекта и разделение его с другими разработчиками. Естественно лучше позволить билдауту загружать и устанавливать пакеты самостоятельно. Вы можете это сделать с помощью секции [productdistros] в buildout.cfg. Например, вы можете установить продукт c именем ExampleProduct и набор продуктов с именем ExampleProductBundle:

[productdistros]
recipe = plone.recipe.distros
urls =
    http://example.com/dist/ExampleProduct-1.0.tgz
    http://example.com/dist/ExampleProductBundle-1.0.tgz
nested-packages =
    ExampleProductBundle-1.0.tgz
version-suffix-packages =

Заметьте, что наш вымышленный ExampleProductBundle распространяется в виде единой директории, содержащей несколько продуктов в поддиректориях, поэтому мы перечисляем его в nested-packages.

Как всегда, если вы поменяли buildout.cfg, вы должны перезапустить buildout:

$ ./bin/buildout

Управление ZCML файлами

Важно понимать, что Zope автоматически не загружает файлы configure.zcml пакетов, расположенных не в пространстве имен Products.* и без поддержки z3c.autoinclude(смотри следующую страницу для более детальной информации о z3c.autoinclude). Вместо этого, вы должны явно создать ссылку на пакет. Buildout создаст такую ссылку (известную как ZCML слаг) для имен, перечисленных в опции zcml в часте [instance]. Далее пример конфигурации, обеспечивающей доступность borg.project в Zope:
[buildout]
...
eggs =
    elementtree
    borg.project

...

[instance]
...
zcml = 
    borg.project

Вы можете использовать следующий синтаксис, если надо загрузить overrides.zcml или meta.zcmlес:

zcml =
    some.package
    some.package-overrides
    some.package-meta

Продукты политики

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

<configure xmlns="http://namespace.zope.org/zope">

    <include package="borg.project" />

</configure>

В этом случае, вам по-прежнему нужно создать один слаг (используя опцию zcml как показано выше) для продукта политики.

Действия с Документом