Virtualenv и контроль версий исходного кода

84

Недавно я начал проект Django и быстро понял, что virtualenv будет действительно полезен по многим причинам. Я настроил virtualenv и свой проект, но теперь мне интересно, какой файл мне добавить в систему управления версиями (в моем случае - Mercurial). Должен ли я добавить все файлы в папку venv? Как мне убедиться, что коллега может клонировать и сразу приступить к работе, без необходимости заново настраивать env?

Мартин
источник
18
Я бы не рекомендовал помещать virtualenv в систему управления версиями - он не будет переноситься между версиями Python, ОС или 32/64 битными платформами. Вместо этого просто используйте ~/path/to/virtualenv/bin/pip freeze > ~/path/to/repo/requirements.txt. Другие разработчики должны настроить свой собственный virtualenv, но это буквально две команды - virtualenv ~/path/to/env, ~/path/to/env/bin/pip install -r ~/path/to/requirements.txt.
AdamKG 06
1
Уважаемый гуглер, см. Также: stackoverflow.com/a/6012590/82216

Ответы:

106

Вы requirements.txtсоздаете файл «требований» (обычно ), который фиксируете вместе с вашим проектом:

pip freeze > requirements.txt

Затем каждый разработчик настроит свой собственный virtualenv и запустит:

pip install -r requirements.txt
Крис Прэтт
источник
6

Все эти проблемы с окружением являются обычным явлением, когда вы занимаетесь разработкой на python / django! Я прошел через все эти проблемы и протестировал некоторые решения! Вещи, которые я тестировал:

  1. Проект работает на местном уровне
  2. Проект работает в virtualenv
  3. Проект работает на виртуальной машине
  4. Проект запущен в виртуальной машине с использованием бродяг

Лучшее решение, которое я нашел, было №4! потому что в компании, в которой я работал, у каждого человека в команде своя ОС, всевозможные окна, Mac и Linux, и для установки всех зависимостей для каждой среды требуется время! Поэтому мы решили попробовать virtualenv, и это действительно хорошо! но все же каждый человек должен настраивать свое собственное окружение. Проблема virtualenv в том, что все источники Python находятся в среде, которую вы создаете! Поэтому я бы не стал передавать эти файлы в систему контроля версий! Лучшее решение было №4, потому что это было именно то, что мне было нужно, Vagrant использует Chef для настройки вашей среды, так что вам просто нужно написать несколько рецептов и позволить vagrant запустить их за вас! Затем вы отправляете эти рецепты в SCM, а затем, когда следующий человек получит файлы из SCM и перезагрузит виртуальную машину, все зависимости будут установлены автоматически!

У меня есть сообщение в блоге, объясняющее больше по этому поводу, а также я создал проект Django Blank в github, чтобы вы могли получить его, чтобы иметь начальную точку вашего проекта с помощью vagrant.

http://arthurnn.com/blog/2011/11/25/easy-django-quickstart/ (ссылка больше не активна, поэтому связана с Wayback Machine)

РЕДАКТИРОВАТЬ

Решение от Криса Пратта тоже хорошее, однако некоторые библиотеки не так просто установить во всех ОС, например, у многих людей на Mac возникают проблемы, когда они хотят установить MySQLdb-python. это действительно распространенная библиотека, но если каждый в вашей команде должен тратить время на решение этой проблемы, это совсем не хорошо!

Артур Невес
источник
MySQLdb-pythonЭто действительно хорошая причина для использования полноценной среды, но нельзя ли этого также сделать с помощью pip / requirements.txt?
kbuilds