У Django есть эквивалент Rails "bundle install"?

Мне нравится в проектах Rails, что при развертывании на удаленном сервере, если все настроено правильно, вы можете просто сделать:

$: bundle install

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

Есть ли что-то подобное для Python/Django?

Ответ 1

Вы можете заморозить требования. Это создает список всех модулей Python, необходимых вашему проекту. Я считаю, что bundle схож по понятию.

Например:

virtualenv --no-site-packages myproject_env # create a blank Python virtual environment
source myproject_env/bin/activate # activate it
(myproject_env)$ pip install django # install django into the virtual environment
(myproject_env)$ pip install other_package # etc.
...
(myproject_env)$ pip freeze > requirements.txt

Последняя строка генерирует текстовый файл, все пакеты, которые были установлены в вашей настраиваемой среде. Вы можете использовать этот файл для установки тех же требований на других серверах:

pip install -r requirements.txt

Конечно, вам не нужно использовать pip, вы можете создать файл требований вручную; он не имеет особых требований к синтаксису. Просто пакет и (возможно) идентификатор версии в каждой строке. Вот пример типичного проекта django с некоторыми дополнительными пакетами:

Django==1.4
South==0.7.4
Werkzeug==0.8.3
amqplib==1.0.2
anyjson==0.3.1
celery==2.5.1
django-celery==2.5.1
django-debug-toolbar==0.9.4
django-extensions==0.8
django-guardian==1.0.4
django-picklefield==0.2.0
kombu==2.1.4
psycopg2==2.4.5
python-dateutil==2.1
six==1.1.0
wsgiref==0.1.2
xlwt==0.7.3

Ответ 2

Ближайший, вероятно, virtualenv, pip и файл требований. С этими тремя ингредиентами довольно легко написать простые сценарии начальной загрузки.

Более требовательным и сложным является buildout. Но я бы пошел на это, только если virtualenv и pip недостаточно.

И если вы расширяете этот подход с помощью fabric и необязательно cuisine, у вас уже есть автоматическое развертывание проекта. Ознакомьтесь с этими ссылками для получения дополнительной информации: