Инструменты управления проектом / сборки для проекта Django?

Исходя из Java-разработки, где есть много инструментов для сборки и управления проектами, я хотел бы знать, что доступно для Django. Я действительно хотел бы использовать что-то вроде Maven для создания вещей, но есть ли другой предпочтительный способ сделать это?

Я действительно ищу следующее:

  • Здание командной строки: mvn install это так просто и круто.
  • Тестовые запуски командной строки. Я хотел бы интегрировать это приложение в нечто вроде Hudson для непрерывной интеграции, так как я хардкорный, как это.
  • Развертывание медиа на локальном тестовом сервере (JS, CSS, изображения и т. Д.)

Возможно ли это в настоящее время с Maven или другим инструментом? Я начинаю довольно крупный проект, и мне бы хотелось иметь систему управления сборкой / проектом Kicking-Rad, такую ​​как Maven, чтобы помочь проекту расти со временем.

2 ответа

Решение

На ум приходят два инструмента, оба являются общими инструментами Python - им не нужно специально работать с Django:

  • Ткань. Мы используем это; это позволяет нам писать удаленные команды, как если бы мы были в SSH, загружать код и т. д. Это не то, что вы не можете сделать, и, поскольку это по сути сценарий bash, написанный на python, очень легко приступить к работе. Но это также bash-скрипт, написанный на python, что означает, что вы можете импортировать части вашего приложения django, запускать тесты или делать все, что python может сделать в процессе запуска вашего развертывания.
  • Buildout. Я не использовал это, но наш постоянный разработчик Django говорит мне, что это абсолютно инструмент для использования. По-видимому, это либо та же идея, либо чуть более абстрактный, более ориентированный на питон эквивалент.

Я уверен, что есть другие доступные пакеты. Лучший совет, который я могу вам дать, - это кратко оценить их и выбрать тот, который наилучшим образом соответствует вашему сценарию / стилю работы в команде. Обратите внимание, что в основном это инструменты развертывания - сборки на python на самом деле не имеют смысла, так как вы не компилируете код на python.

С точки зрения CI, есть три команды от django, о которых вам нужно знать:

  • ./manage.py test запускает ваши тесты со всех tests.py файлы. В основном это специфичные для django улучшения unittestпакет python.
  • ./manage.py collectstatic собирает статические файлы в каталог по вашему выбору; очень полезно для объединения всех кусочков, чтобы существовать на статическом медиа-сервере. Посмотрите на статические файлы, как это работает.
  • Тебе нужен Юг для этого, ./manage.py schemamigration app --auto && ./manage.py migrate app - это применяет изменения модели к базовой схеме sql. По сути, если вы просто измените модель и не будете использовать юг, Django очень расстроится, потому что новое поле не будет соответствовать старой схеме sql и не сможет сохранить вашу модель. Миграции схемы, поддерживаемые югом, позволяют обновить существующую заполненную базу данных. Стоит делать вручную перед автоматизацией.
  • Я также должен отметить, что вы можете написать собственные команды управления для выполнения ./manage.py whatever you like, Это имеет значительный потенциал - например, я использовал команды управления в качестве команды для выполнения в задании cron. Вы также можете создавать интерактивные команды для администраторов вашего приложения и, конечно же, развертывания и тестирования.

Как они обрабатываются, зависит от того, какие настройки у вас есть и какие инструменты вы выберете.

При компиляции: самое близкое к построению с помощью python - это freeze, aka py2exe или cxfreeze, которые создают двоичные файлы. Имейте в виду, что все, что они делают - это сохраняют байт-код python в exe и пропускают его через интерпретатор, который в любом случае является общим объектом. Кроме того, вы не можете cxfreeze для приложения django, так как сам django использует динамический импорт, который происходит во время выполнения и поэтому не может быть оценен с помощью cxfreeze, который по сути является инструментом времени компиляции. Так что дисконтное строительство как задача, которую нужно выполнить. Вы можете увидеть .pyc файлы, появляющиеся в вашем каталоге - python преобразует ваш скрипт python в байт-код python, если в него были внесены изменения с момента последнего pyc. Если никаких изменений не было сделано, он загружает pyc файл с прошлого раза. Байт-код Python - это то, что исполняется, так что это не ускорение с точки зрения производительности, просто время загрузки.

Если вам нужно что-то, чтобы управлять и воспроизводить вашу (Django) среду Python, тогда я бы рекомендовал рассматривать pip с virtualenv в качестве альтернативы Buildout.

Эта статья о SaltyCrane описывает использование pip с Django. В статье описывается процесс в Ubuntu, но мы используем аналогичную настройку как в Ubuntu, так и в OSX.

Мы имеем опыт работы как со сборкой, так и с пипсами, и обнаружили, что пипы проще, надежнее и легче масштабируются, чем сборка.

Другие вопросы по тегам