2011-09-15 22 views
78

Mam istniejące środowisko w virtualenv, z dużą ilością pakietów, ale starą wersją Django.Duplikat virtualenv

Co jeśli chcę powielać tego środowiska,
więc mogę mieć innego środowiska, w którym można zainstalować nowszą wersję Django,
ale zachowując wszystkie pakiety, które są już w innym środowisku?

+3

bym pip zamrozić wszystkie wymagania w „requirements.txt” pliku i utworzyć inną virtualenv i uruchomić pip zainstalować requirements.txt –

+0

Jeśli wersja Pythona wirtualnego Środowisko, które chcesz skopiować, różni się od domyślnego środowiska Pythona, możesz ustawić nowe środowisko jako 'virtualenv -p/path/to/older/venv/bin/python new_venv', a następnie użyć' requirements.txt' generowane po 'pip freeze' – GiriB

Odpowiedz

116

Najprostszym sposobem jest użycie pip, aby wygenerować plik wymagań. Plik wymagań to w zasadzie plik, który zawiera listę wszystkich pakietów Pythona, które chcesz zainstalować (lub już zainstalowanych w przypadku plików generowanych przez PIP), oraz ich wersje.

Aby wygenerować plik wymagania, przejdź do swojego oryginalnego virtualenv i uruchom:

pip freeze > requirements.txt 

To wygeneruje requirements.txt plik dla ciebie. Jeśli otworzysz ten plik w edytorze tekstu, zobaczysz coś takiego:

Django==1.3 
Fabric==1.0.1 
etc... 

Teraz edytować wiersz, który mówi Django==x.x powiedzieć Django==1.3 (lub cokolwiek wersję chcesz zainstalować w swoim nowym virtualenv) .

Wreszcie aktywować nowy virtualenv i uruchom:

pip install -r requirements.txt 

I pip automatycznie pobrać i zainstalować wszystkie moduły Pythona wymienione w pliku requirements.txt, bez względu na wersje ty wyszczególnione!

+1

Dziękujemy! Podczas googlowania znalazłem tyle hałaśliwych, brudnych i mylących stron ... Twoje rozwiązanie jest tak czyste i proste ... zrobiło mi się dobrze;) – dolma33

+0

co, jeśli skopiuję folder, a następnie wkleję go na innym komputerze? To by działało? Zakładając oczywiście, że zależności apt-get zostały rozwiązane –

+0

Nie działałby =) – rdegges

2

Czy nie można po prostu:

  • skopiować istniejący wirtualny katalog env do nowego
  • aktualizację do nowej Django?
+5

Czasami używam tego podejścia, ale mam niedogodność polegającą na konieczności aktualizacji niektórych ścieżek wewnątrz skryptu bin/activate. –

+3

Czy zmiana jest prostym znalezieniem i zamiana na odniesienie do nazwy env, czy jest to bardziej skomplikowane? – Greg

+1

W moim przypadku, wystarczy zaktualizować ścieżkę w stałej VIRTUAL_ENV w bin/aktywacji, zrobiłem sztuczkę – bryanph

17

Inną opcją jest użycie virtualenv-clone pakiet:

skrypt do klonowania nie relocatable virtualenv.

+0

Witam, mam rację, zakładając, że to pozwala mi skopiować CAŁE środowisko Pythona do pliku. Wtedy musiałbym po prostu załadować ten plik do nowego komputera/systemu operacyjnego i uzyskać wszystkie moje pakiety serwisowe zainstalowane ponownie – aceminer

8

virtualenvwrapper zapewnia command to duplicate virtualenv

cpvirtualenv ENVNAME [TARGETENVNAME] 
+0

Niezbyt dobry pomysł. "Kopiowanie środowisk wirtualnych nie jest dobrze obsługiwane. Każdy virtualenv zawiera informacje o ścieżce zakodowane na stałe, a mogą występować przypadki, w których kod kopiowania nie musi aktualizować określonego pliku. – Temak