Сборка MercurialRecipe ломается при многократном импорте - PullRequest
1 голос
/ 29 января 2011

Я пытался импортировать несколько пакетов, которые на самом деле являются зависимостями, в яйцо, которое я строю. Поскольку этих яиц нет в магазине с сыром, я не могу использовать i nstall_requires = ['pack1', 'pack2'] в своем скрипте setup.py, поэтому я пытаюсь добавить их в конфигурацию buildout следующим образом:

  1 [buildout]
  2 develop = .
  3 parts = 
  4     python
  5     pack1
  6     pack2
  7 
  8 extra_paths = ${pack1:location}/src/
  9     ${pack2:location}/src/
 10 
 11 [python]
 12 recipe = zc.recipe.egg
 13 eggs = myegg
 14 extra-paths = 
 15     ${buildout:extra_paths}
 16 
 17 interpreter = python
 18 
 19 [pack1]
 20 recipe = mercurialrecipe
 21 repository = https://repo.xxx.com/hg/pack1/
 22 
 23 [pack2]
 24 recipe = mercurialrecipe
 25 repository = https://repo.xxx.com/hg/pack2/

Возможно, я делаю это неправильно - я только начинаю со buildout. Когда я запускаю свой bin / buildout, я получаю следующие ошибки:

Updating python.
Updating pack1.
pack1: Pulling repository https://repo.xxx.com/hg/pack1/ and updating /home/martin/proj1/parts/pack1
pulling from https://repo.xxx.com/hg/pack1/
searching for changes
no changes found
Installing pack2.
pack2: Cloning repository https://repo.xxx.com/hg/pack2/ to /home/martin/proj1/parts/pack2
While:
  Installing pack2.

    An internal error occurred due to a bug in either zc.buildout or in a
    recipe being used:
    Traceback (most recent call last):
      File "/home/martin/proj1/eggs/zc.buildout-1.5.2-py2.6.egg/zc/buildout/buildout.py", line 1805, in main
        getattr(buildout, command)(args)
      File "/home/martin/proj1/eggs/zc.buildout-1.5.2-py2.6.egg/zc/buildout/buildout.py", line 584, in install
        installed_files = self[part]._call(recipe.install)
      File "/home/martin/proj1/eggs/zc.buildout-1.5.2-py2.6.egg/zc/buildout/buildout.py", line 1297, in _call
        return f()
      File "build/bdist.linux-x86_64/egg/mercurialrecipe/__init__.py", line 50, in install
        commands.clone(ui.ui(), get_repository(self.source), self.destination)
      File "build/bdist.linux-x86_64/egg/mercurialrecipe/__init__.py", line 18, in get_repository
        return hg.repository(ui.ui(), location)
      File "/usr/lib/python2.6/site-packages/mercurial-1.7.3-py2.6-linux-x86_64.egg/mercurial/hg.py", line 96, in repository
        repo = _lookup(path).instance(ui, path, create)
      File "/usr/lib/python2.6/site-packages/mercurial-1.7.3-py2.6-linux-x86_64.egg/mercurial/httprepo.py", line 203, in instance
        return statichttprepo.instance(ui, "static-" + path, create)
      File "/usr/lib/python2.6/site-packages/mercurial-1.7.3-py2.6-linux-x86_64.egg/mercurial/statichttprepo.py", line 146, in instance
        return statichttprepository(ui, path[7:])

Если я переключаю pack1 и pack2, то pack2 устанавливается. В принципе, они оба работают нормально, но как только я пытаюсь получить их обоих - все ломается.

Заранее спасибо. Martin

1 Ответ

3 голосов
/ 30 января 2011

Я бы посоветовал вам перейти на использование mr.developer для внешних зависимостей, управляемых SCM в компоновке.mr.developer позволяет извлекать зависимости (яйца или иные) из репозиториев Mercurial, а также Git, Bazaar, Darcs, Subversion и даже CVS-репозиториев.Вы можете рассматривать эти зависимости как яйца разработки, от которых могут зависеть другие яйца Python в файле setup.py.

Чтобы использовать mr.developer, добавьте его как расширение для сборки:

[buildout]
extensions = mr.developer

Вы говоритеmr.developer о ресурсах, использующих раздел [sources]:

[sources]
pack1 = hg https://repo.xxx.com/hg/pack1/
pack2 = hg https://repo.xxx.com/hg/pack2/

С mr.developer вы теперь получаете инструмент командной строки для управления этими репозиториями;Вы можете проверить их, обновить их и, самое главное, собрать их как яйца разработки для сборки.

Чтобы автоматически проверять такие источники и создавать их как яйца разработки, перечислите их в auto-checkoutопция в разделе [buildout]:

[buildout]
extensions = mr.developer
auto-checkout =
    pack1
    pack2

Когда вы сейчас запустите buildout, оба пакета pack1 и pack2 будут извлечены, собраны как яйца, а при использовании в качестве зависимостей в другом месте использованы для заполнения этих зависимостей.Поэтому, если в строке eggs указан либо «pack1», либо «pack2» или как зависимость другого яйца в файле setup.py, zc.buildout выберет версии, проверенные mr.developer.

Инструмент командной строки bin/developer дает вам полный контроль над этими параметрами, пожалуйста, прочитайте страницу PyPI для mr.developer .

...