2011-01-22 3 views
3

Я использую mercurial, и мне интересно, как это сделать. Вот мое хранилище архитектуры:Как управлять зависимостью при клонировании репозитория?

./repo/utils/workers/[...] 
./repo/utils/tools/[...] 
./repo/proj1/file.py 

Допустим, что в proj1/file.py мне нужно импортировать код, расположенный в рабочих и инструментов. например

from utils.workers import foo 
from utils.tools import bar 

Что бы быть лучшим способом/инструмент, чтобы проверить proj1 со всеми необходимыми зависимостями (например, рабочие/и инструменты /) без необходимости клонировать Utils/рабочих и Utils/инструменты внутри proj1.

Также - делать sys.path.append(repo/utils/workers) не является вариантом.

== Редактировать 01/24/11 ==

Спасибо за все ответы. Я думал о том, как по-настоящему объяснить мою проблему по-разному, и это означает, что мы должны сделать абстракцию hg для лучшего понимания. Предположим, что в /utils/ есть еще несколько модулей, которые не принадлежат моему проекту, но это действительно необходимо. Например: http://code.google.com/p/python-gflags/ При проверке /repo/proj1/ Я хочу, чтобы все зависимости, независимо от того, какой репозиторий они формируют, также проверяются - но с чтением только с.

Так что, если я hg clone /proj1/ Я хочу это действие также клонировать все необходимые модули из /utils/workers/, /utils/tools/, и питон-GFLAGS под /utils/python-gflags

Я надеюсь, что это помогает немного прояснить, что я пытаясь сделать.

Приветствия,

Martin

+2

'sys.path.append ('/ path/to/repo')' достаточно, если вы хотите запустить из проверки. Также вы можете использовать 'pip' и' virtualenv'. 'pip' поддерживает установку с Mercurial repo, checkout, inplace и т. д.' virtualenv' позволяет вам иметь несколько версий. – jfs

ответ

0

Лучшее решение, которое я нашел для этого, является использование Buildout.

http://www.buildout.org

Это действительно полезно решение для управления зависимостями.

0

Вы должны смотреть на subrepositories (который также называется nested)

+0

Subrepositories, насколько я понимаю, не подходит для этой цели, поскольку они должны быть вложенными репозиториями, а не импортированы как дополнительные модули, которые также должны быть прочитаны. Спасибо за подсказку tho - я посмотрел в subrepo, но это не соответствовало моим потребностям, к сожалению :( – Martin

+0

Хм ... вы уверены, что subrepos не делают то, что вы хотите? Один «проект репо» с именем «repo», с тремя subrepos «workers», «tools» и «proj1»? Я использовал их почти для этой цели. (В моем случае «инструменты» были реестром svn, контролируемым другой группой) – jkerian

+0

Если вы не можете/выиграли ' t используйте subrepos, вы останетесь с чистым ручным процессом. Помощь, которую вы получите от Mercurial, - это subrepos. –

Смежные вопросы