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.03.12

1
Шановний Googler, також дивіться: stackoverflow.com/a/6012590/82216
sampablokuper

Відповіді:


106

Ви генеруєте файл "вимог" (як правило requirements.txt), який ви фіксуєте у своєму проекті:

pip freeze > requirements.txt

Потім кожен розробник налаштує власний virtualenv і запустить:

pip install -r requirements.txt

6

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

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

Найкращим рішенням, яке я знайшов, було №4! оскільки в компанії, в якій я працював, кожна людина в команді має різну ОС, всі види Windows, mac та linux, і для встановлення всіх залежностей для кожного середовища потрібен час! Тому ми вирішили спробувати virtualenv, що справді добре! але все-таки кожна людина повинна налаштувати своє оточення. Проблема virtualenv полягає в тому, що всі джерела python знаходяться в середовищі, яке ви створюєте! Тож я б не надсилав ці файли до вихідного контролю версій! Найкращим рішенням було №4, адже саме це було те, що мені потрібно, Vagrant використовує Chef для налаштування вашого середовища, тому вам просто потрібно написати кілька рецептів і дозволити бродягам запускати їх за вас! Потім u надсилайте ці рецепти до SCM, тоді, коли наступна особа отримає файли з SCM і перезавантажить віртуальну машину, всі залежності будуть автоматично встановлені!

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

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

РЕДАГУВАТИ

Рішення від Chris Pratt також є хорошим, проте деякі бібліотеки не так просто встановлювати у всіх ОС, наприклад, багато людей на Mac отримують проблеми, коли хочуть встановити MySQLdb-python. що є справді загальною бібліотекою, але якщо кожному у вашій команді доводиться витрачати час на вирішення цих питань, це зовсім не добре!


MySQLdb-pythonЦе дійсно вагома причина використовувати повноцінне середовище, але чи не можна цього також зробити за допомогою pip / requirements.txt?
kbuilds
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.