У меня есть несколько проектов на Python с общими модулями. До сих пор я ... хм ... хранил несколько копий общего кода и синхронизировал их вручную. Но я явно предпочел бы заняться чем-нибудь другим.
Мне теперь кажется, что zc.Buildout может быть то, что мне нужно. Я предполагаю, что мне следует поместить каждый повторно используемый компонент моей системы в отдельное яйцо, а затем использовать buildout для сборки их в проекты.
Я также думаю, что для любого конкретного модуля я должен поместить модульные тесты в отдельный пакет или яйцо, чтобы я также не устанавливал копии модульных тестов компонента в каждом проекте. Я хочу проводить модульное тестирование только там, где разрабатывается моя библиотека, а не там, где она просто используется.
Так что, может быть, я хочу что-то вроде этого
projects
lib1
tests
code
lib2
tests
code
app1
tests
appcode
app2
tests
appcode
и т.п.
Где app1 и app2 являются независимыми приложениями со своим собственным кодом и тестами, но также включают и используют как lib1, так и lib2. И lib1 / test, lib1 / code, lib2 / test, lib2code, app1, app2 - это отдельные яйца. Это звучит правильно?
Однако сейчас я запутался. Я предполагаю, что при разработке app1 я хочу, чтобы buildout вытягивал копии lib1, lib2 и app1 в отдельный рабочий каталог, а не помещал копии этих библиотек напрямую в app1. Но как это работает с моим исходным кодом SVN? Если рабочий каталог динамически создается с помощью buildout, он не может быть действующим каталогом SVN, из которого я могу проверить изменения обратно в репозиторий?
Я неправильно понял, как нужно использовать buildout? Могу ли я выбрать совершенно другой подход? Как совместить управление исходным кодом с повторным использованием модулей между проектами?
Обновление: спасибо двум людям, ответившим на этот вопрос. Я больше экспериментирую с этим.