2012-08-09 10 views
8

Używam virtualenv do opracowania aplikacji django z zespołem. Serwer, na którym działamy, uruchamia Pythona 2.6, ale domyślny dla naszych komputerów to 2.7.3. Czy jest jakiś sposób, aby określić wersję python w pliku requirements.txt lub coś podobnego w bazie kodu?Określanie wersji Pythona dla Virtualenv w Requirements.txt

Wiem, że require.txt jest rzeczą pecetową, a wersja python jest rzeczą virtualenv, ale byłoby naprawdę wygodnie nie musieć mówić każdej nowej osobie dołączającej do zespołu, jak skonfigurować virtualenv.

+2

Nie rozumiem, co motywuje Twoje pytanie. Czy twój kod jest napisany dla '2.6' lub' 2.7'? Jeśli nie jest napisane dla "2.6", to oczywiście nie będzie działać na twoim serwerze, więc nie wiem, co chcesz zrobić :). Zakładając, że jest napisany dla '2.6', wystarczy udokumentować, że jest to' 2.6 + ', i nie ma potrzeby, aby szczególnie określać użycie' 2.6' podczas tworzenia venv, co jest nie tak, jeśli ktoś używa '2.7' ?. – Julian

+1

Kod jest napisany dla wersji 2.6, ponieważ wymagają tego serwery. Powinien być udokumentowany, ale chciałbym wymusić 2.6 przez virtualenv, a następnie powiedzieć ludziom, że jest 2.6+ i mam nadzieję, że dokładnie przeczytali dokumentację Pythona. – Arion

+1

To pytanie zostało wysłuchane tutaj: http://stackoverflow.com/a/33451105/1959808 –

Odpowiedz

4

Ani pip, ani virtualenv nie zainstalują pythona (chociaż pip tries). Używają tego, co określasz.

Możesz napisać README, który wymienia wymaganą wersję Pythona lub dostarczyć skrypt fabric, który może zostać wdrożony w localhost i określić tam wersję. Na przykład: instructions to install virtualenv, pip, distribute.

Dla tych ludzi, którzy nie czytają instrukcji nie może być system CI (jenkins, buildbot), który może być zasilany za pomocą testów jednostkowych obsługiwane wersje Pythona (przed/po commit).

Do zarządzania wieloma instalacjami python można użyć czegoś takiego jak pythonz.

2

byłoby bardzo wygodne, aby nie musiał powiedzieć każdą nową osobę dołączeniem do zespołu, jak skonfigurować ich virtualenv

Wystarczy dodać go do normalnego zestawu instrukcji dasz nowych członków, gdy te Przystąpić; dokładnie w tym samym miejscu, gdy powiesz im o wewnętrznej wiki dokumentacji, hasło do wifi i numer telefonu do sklepu z kanapkami.

To będzie niezwykle nieczytelny, aby nie mówić ludziom i zlecić ich samodzielne wykonanie; Po raz pierwszy złożą coś, co wykorzystuje collections.Counter tylko dowiedzieć się, że złamał build, ponieważ serwer nie ma 2.7.x

+3

To jest plan awaryjny, ale wolałbym programowe rozwiązanie problemu programowego. – Arion

+0

Nie jestem pewien, czy kwalifikuje się to jako problem programowy; jest to po prostu kwestia dokumentacji/wejścia na pokład. Jeśli * musisz *, możesz dodać czek do skryptu wdrażania/przechwycenia, który weryfikuje wersję Pythona; ale o co w tym chodzi? Nawet jeśli wersja się nie zgadza - Twój kod może nadal działać. Musisz sprawdzić, czy Twój kod korzysta z funkcji wprowadzonych w wersji 2.7, o których nie wiem w sposób zautomatyzowany. –

+1

"Nie jestem pewien, czy kwalifikuje się to jako problem programowy, jest to po prostu kwestia dokumentacji/włączenia." Zgodnie z tą logiką nie powinieneś w ogóle posiadać pliku requirements.txt, ponieważ wtedy ludzie mogą założyć, że jest to najnowsza wersja biblioteki i używać funkcji z tej biblioteki, które nie istnieją w wersji, której używają. Poza tym, jeśli nie masz testów jednostkowych (które mogłyby przerwać Twój przykład), to i tak grasz ryzykowną grę. – semicolon

0

jak na swój komentarz, jedynym problemem tutaj należy upewnić się nie tylko do 2.7 sprawia, że ​​kod do twojej bazy kodu. W tym celu zalecam użycie tox i skonfigurowanie go do utworzenia środowiska 2.6 do przetestowania, tak aby w przypadku, gdy współpracownicy uruchamiają pakiet testowy, testy są uruchamiane w środowisku wirtualnym 2.6.

Powiązane problemy