2012-02-23 5 views
3

Как я могу подключить сторонние приложения Django к моему проекту Djano, если они требуют небольших изменений кода? Мне нужно, чтобы быть в состоянии:Рабочий процесс для настройки приложений Django и внесения/объединения вверх по потоку

  1. Merge вверх по течению изменения
  2. Отправить тянуть запросы на новые возможности/модов
  3. Используйте модифицированное приложение в нескольких проектах
  4. Уметь развернуть модифицированное приложение с моей Django проецировать
  5. Держите вещи частные (необязательные)

Существующие Semi-решения

Похоже, что существует большая путаница в этой теме. Предложенные мной методы:

Метод # 1 - pip/virtualenv - сохранить проект в отдельном репо и добавить его к пути python. Преимущество: чистое разделение кода на отдельные проекты, вероятно, более чистое, менее сложное Недостаток: требуется более сложное управление для обновления зависимости при разработке локально.

2 - git subodule - вытащить код в каталог проекта Django с использованием модуля подмодулей. преимущество: кажется, на самом деле работает, в то время как поддерево не обрабатывает это приложение случай Django хорошо Недостатки: более сложное развертывание

3 - мерзавец поддерево - вытащить код в каталог проекта Django с помощью модуля поддерево. Я сам изучил это больше, что вы можете увидеть здесь. http://projects.madteckhead.com/django-superproject-3rd-party-git-repo-subdirectories-mapped-mapped-to-apps/ Преимущество: код и история хранятся в проекте Django, простота развертывания и снижает сложность для соавторов. Недостаток: не может «подстроить» подкаталог или репо в подкаталог проекта, и если вы можете ... Я не смог понять, как слить восходящие изменения.

4 - скопируйте приложение стороннего разработчика в каталог приложений проекта django. Преимущества: простой Недостатки: не может легко объединить изменения, или отправить тянуть requets

Проблема заключается в том, что пакеты Python на самом деле есть приложение в подкаталог репо. например thirdpartyapp/ thirdpartyapp/setup.py thirdpartyapp/thirdpartyapp/[весь код интереса здесь]

Вопрос

Может кто-нибудь пролить свет на то, как лучше всего включить несколько приложений третьей партии Джанго в django project, внести в них изменения/слить восходящие изменения.

Я бы очень признателен за чистоту рабочего процесса. Это был один из главных барьеров для меня, способствующий возврату приложений, которые я использую в Django.

Большое спасибо,

ответ

1

Я использую метод # 1 (пип/virtualenv) на некоторое время, и я не чувствую себя способ управления или разработки кода приложений 3-х сторон является сложным.

В порядке использования полных путей к внешним хранилищам 3-х сторонних приложений в requirements.txt, pip установит это приложение в каталог PROJECT_ROOT/env/src/application_dir со всеми преимуществами любой системы управления версиями. Там вы можете развиваться, тянуть изменения в свою собственную вилку или делать все как с обычными подмодулями git.

Если вам необходимо внести изменения или применить некоторые исправления к 3-му партийному приложению, не вытягивая изменения во внешних репозиториях, но с возможностью получения изменений в процессе производства, я могу порекомендовать вам пакет fabriclassed. Я просто обертываю инструмент fabric, помогая вам хранить файлы, организованные с использованием классов с несколькими задачами по умолчанию. Например, с fabriclassed вы можете пропатчить anysome зависимостей внутри директории virtualenv используя автоматически сгенерированные * .diff файлы с командами:

# to dump all diffs of 3th party applications 
$ fab diff_dump 

# to patch all 3th party applications 
$ fab patch 
0

Я собираюсь использовать GIT подмодулях. есть много преимуществ, потому что, если вам нужно сотрудничать в приложении с другими, которые не являются частью вашего основного репо и в значительной степени развиты другими, вам лучше. это не так сложно технически.

+0

Мне бы хотелось узнать больше о том, как вы это настроили. Я пробовал этот метод, но обычно обнаружил, что он добавляет уровень сложности, особенно с такими инструментами, как Hosted Chef, которым могут потребоваться дополнительные ключи аутентификации git для каждого репо. Например, как вы развертываете репо? Кроме того, как вам синхронизировать подмодули с репо? –