Virtualenv i kontrola wersji źródła

84

Niedawno zacząłem projekt Django i szybko zdałem sobie sprawę, że virtualenv będzie naprawdę przydatny z wielu powodów. Skonfigurowałem virtualenv i mój projekt, ale teraz zastanawiam się, jaki plik powinienem dodać do kontroli źródła (w moim przypadku Mercurial). Czy powinienem dodać wszystkie pliki w folderze venv? Jak upewnić się, że współpracownik może sklonować i natychmiast rozpocząć pracę bez konieczności ponownego konfigurowania środowiska env?

Jaskółka oknówka
źródło
18
Nie polecałbym umieszczania virtualenv pod kontrolą źródła - nie będzie przenośny między wersjami Pythona, systemami operacyjnymi lub platformami 32/64 bitowymi. Zamiast tego po prostu użyj ~/path/to/virtualenv/bin/pip freeze > ~/path/to/repo/requirements.txt. Inni deweloperzy będą musieli skonfigurować własną virtualenv, ale to dosłownie dwa polecenia - virtualenv ~/path/to/env, ~/path/to/env/bin/pip install -r ~/path/to/requirements.txt.
AdamKG
1
Drogi Googlerze, zobacz też: stackoverflow.com/a/6012590/82216
sampablokuper

Odpowiedzi:

106

Generujesz plik „wymagań” (zwykle requirements.txt), który zatwierdzasz w swoim projekcie:

pip freeze > requirements.txt

Następnie każdy programista skonfiguruje własny virtualenv i uruchomi:

pip install -r requirements.txt
Chris Pratt
źródło
6

Wszystkie te problemy ze środowiskiem są dość powszechne podczas tworzenia programów w Pythonie / django! Przeszedłem przez wszystkie te problemy i przetestowałem kilka rozwiązań! Rzeczy, które przetestowałem:

  1. Projekt działa lokalnie
  2. Projekt działający w virtualenv
  3. Projekt działający na maszynie wirtualnej
  4. Projekt działający na maszynie wirtualnej przy użyciu vagrant

Najlepsze rozwiązanie jakie znalazłem to nr 4! ponieważ firma, w której pracowałem, każda osoba w zespole ma inny system operacyjny, wszelkiego rodzaju okna, Mac i Linux, a zainstalowanie wszystkich zależności dla każdego środowiska zajmuje trochę czasu! Postanowiliśmy więc wypróbować virtualenv, który jest naprawdę dobry! ale wciąż każda osoba musi ustawić własne środowisko. Problem w virtualenv polega na tym, że wszystkie źródła Pythona znajdują się w środowisku, które tworzysz! Więc nie wypychałbym tych plików do kontroli wersji źródła! Najlepszym rozwiązaniem było nr 4, ponieważ właśnie tego potrzebowałem, Vagrant używa programu Chef do skonfigurowania środowiska, więc musisz po prostu napisać kilka przepisów i pozwolić włóczęgom uruchomić je za Ciebie! Następnie przesyłasz te przepisy do SCM, a gdy następna osoba pobierze pliki z SCM i przeładuje maszynę wirtualną, wszystkie zależności zostaną automatycznie zainstalowane!

Mam post na blogu wyjaśniający więcej na ten temat, a także stworzyłem projekt Django Blank na githubie, więc możesz to zrobić, aby mieć punkt początkowy twojego projektu za pomocą włóczęgi.

http://arthurnn.com/blog/2011/11/25/easy-django-quickstart/ (link nie jest już aktywny, więc jest powiązany z Wayback Machine)

EDYTOWAĆ

Rozwiązanie autorstwa Chrisa Pratta jest również dobre, jednak niektóre biblioteki nie są tak łatwe do zainstalowania we wszystkich systemach operacyjnych, na przykład wiele osób na komputerach Mac ma problemy, gdy chcą zainstalować MySQLdb-python. która jest naprawdę powszechną biblioteką, ale jeśli wszyscy w twoim zespole muszą spędzać czas na rozwiązywaniu tych problemów, wcale nie jest dobra!

Arthur Neves
źródło
MySQLdb-pythonTo naprawdę dobry powód, aby używać pełnego środowiska, ale czy nie można tego również osiągnąć za pomocą pip / Requirements.txt?
kbuilds