Хранение каталога virtualenv внутри git, как вы заметили, позволит вам развернуть все приложение, просто выполнив клон git (плюс установив и настроив Apache / mod_wsgi). Одна потенциально важная проблема с этим подходом состоит в том, что в Linux полный путь жестко запрограммирован в сценариях активации, dvango-admin.py, easy_install и pip в venv. Это означает, что ваша virtualenv не будет работать полностью, если вы хотите использовать другой путь, возможно, для запуска нескольких виртуальных хостов на одном сервере. Я думаю, что веб-сайт на самом деле может работать с неверными путями в этих файлах, но у вас будут проблемы при следующем запуске pip.
Решение, которое уже дано, состоит в том, чтобы хранить достаточно информации в git, чтобы во время развертывания вы могли создать virtualenv и выполнить необходимые установки pip. Как правило, люди запускают pip freeze
, чтобы получить список, а затем сохранить его в файле с именем needs.txt. Может быть загружен с pip install -r requirements.txt
. RyanBrady уже показал, как можно выстроить операторы развертывания в одну строку:
# before 15.1.0
virtualenv --no-site-packages --distribute .env &&\
source .env/bin/activate &&\
pip install -r requirements.txt
# after deprecation of some arguments in 15.1.0
virtualenv .env && source .env/bin/activate && pip install -r requirements.txt
Лично я просто поместил их в скрипт оболочки, который запускаю после выполнения git clone или git pull.
Хранение каталога virtualenv также несколько усложняет обработку обновлений в pip, так как вам придется вручную добавлять / удалять и фиксировать файлы, полученные в результате обновления. Используя файл require.txt, вы просто изменяете соответствующие строки в файле require.txt и снова запускаете pip install -r requirements.txt
. Как уже отмечалось, это также уменьшает "спам коммитов".