Jak zduplikować virtualenv

138

Mam istniejącego virtualenv z wieloma pakietami, ale starą wersję Django.

To, co chcę zrobić, to zduplikować to środowisko, więc mam inne środowisko z dokładnie tymi samymi pakietami, ale nowszą wersją Django. Jak mogę to zrobić?

dolma33
źródło
3
Zamroziłbym wszystkie Twoje wymagania w pliku „Requirements.txt” i utworzył kolejny virtualenv oraz uruchomił pip install Require.txt
Calvin Cheng
Jeśli wersja środowiska wirtualnego w języku Python, które chcesz skopiować, różni się od domyślnego środowiska Python, możesz skonfigurować nowe środowisko jako, virtualenv -p /path/to/older/venv/bin/python new_venva następnie użyć tego, requirements.txtktóre zostało wygenerowane popip freeze
GiriB

Odpowiedzi:

188

Najłatwiejszym sposobem jest użycie pip do wygenerowania pliku wymagań. Plik wymagań to w zasadzie plik, który zawiera listę wszystkich pakietów Pythona, które chcesz zainstalować (lub już zostały zainstalowane w przypadku pliku wygenerowanego przez pip), oraz ich wersje.

Aby wygenerować plik wymagań, przejdź do oryginalnego virtualenv i uruchom:

pip freeze > requirements.txt

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

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

Teraz edytuj wiersz, który mówi Django==x.xdo powiedzenia Django==1.3(lub dowolną wersję, którą chcesz zainstalować w swoim nowym virtualenv).

Na koniec aktywuj swój nowy virtualenv i uruchom:

pip install -r requirements.txt

Pip i automatycznie pobrać i zainstalować wszystkie moduły Pythona wymienione w requirements.txt pliku, bez względu na wersje, które określono!

rdegges
źródło
3
Dziękuję Ci! Podczas googlowania znalazłem tak wiele hałaśliwych, niechlujnych i zagmatwanych stron ... Twoje rozwiązanie jest takie
przejrzyste
co jeśli skopiuję folder, a następnie wkleię go na innym komputerze? To by zadziałało? Zakładając oczywiście, że zależności apt-get zostały rozwiązane
Tales Pádua
W istocie tak nie jest, o czym właśnie się przekonałem.
horcle_buzz,
Widzę wiele wiadomości. Could not find a version that satisfies the requirement a_package=#.#.#Czy mogę łatwo rozwiązać ten problem? Usunąłem linię lub zmieniłem równość na nierówność.
Zmień świat
Działa pyenvrównież dla. Świetna odpowiedź.
Leonard
30

Inną opcją jest użycie virtualenv-clonepakietu:

Skrypt do klonowania nieprzenoszalnego virtualenv.

alecxe
źródło
Cześć, mam rację, zakładając, że pozwala mi to skopiować CAŁE środowisko Pythona do pliku. Następnie musiałbym po prostu załadować ten plik na nowy komputer / system operacyjny i odzyskałbym wszystkie moje pakiety witryn
aceminer
2
"virtualenv-clone source / target /" działało jak urok, dzięki!
ajankuv
upewnij się, że zainstalowaliśmy virtualenv-clonepo aktywacji virtualenv
4givN
15

virtualenvwrapperudostępnia polecenie duplikowania virtualenv

cpvirtualenv ENVNAME [TARGETENVNAME]
Raymond
źródło
8
Niezbyt dobry pomysł. „Kopiowanie środowisk wirtualnych nie jest dobrze obsługiwane. Każdy virtualenv ma zakodowane na stałe informacje o ścieżce i mogą wystąpić przypadki, w których kod kopiowania nie będzie wiedział, że musi zaktualizować określony plik. Należy zachować ostrożność”.
Temak
6

Jeśli używasz Anacondy , możesz po prostu uruchomić:

conda create --name myclone --clone myenv

Spowoduje to skopiowanie myenvdo nowo utworzonego środowiska o nazwie myclone.

Jordania
źródło
4

Najłatwiejszą opcją jest użycie virtualenv-clonepakietu.

Aby zduplikować venv1w venv2, wykonaj następujące kroki:

  1. Zainstaluj virtualenv-clonew venv1fikcyjnym środowisku wirtualnym venv_dummy. Aby stworzyć venv_dummy:

    python -m virtualenv venv_dummy
    source venv_dummy/bin/activate
    
  2. Aby zainstalować virtualenv-clone:

    (venv_dummy): pip install virtualenv-clone
    
  3. Aby powielić venv1do venv2:

    (venv_dummy): virtualenv-clone venv1/ venv2/
    
Safwan
źródło
podpowiedź w bash nie zmienia się, trzeba edytować bin / aktywować, a nie w 100% jasne, jak
MrR
@MrR .. nie musisz edytować, bin/activatejeśli zastosujesz się do tej odpowiedzi. Dlaczego musisz edytować bin/activate?
Safwan
Po sklonowaniu, mój znak zachęty w bash miał oryginalną nazwę środowiska, ze względu na sekcję PS1 w bin/activate
środku
2
@MrR To brzmi jak błąd lub przeoczenie w klonie virtualenv, ale taki, który nie powinien tak naprawdę wpływać na zachowanie.
Joe Holloway
1

Czy nie możesz po prostu:

  • Skopiuj istniejący wirtualny katalog env do nowego
  • Zaktualizować do nowego Django?
Spacedman
źródło
8
Czasami używam tego podejścia, ale mam tę niedogodność, że trzeba aktualizować niektóre ścieżki w skrypcie bin / Activation.
Armando Pérez Marques
3
Czy zmiana polega na prostym znajdowaniu i zastępowaniu odniesień do nazwy env, czy jest to bardziej skomplikowane?
Greg,
1
W moim przypadku po prostu zaktualizowanie ścieżki w stałej VIRTUAL_ENV w bin /
ivate załatwiło sprawę
1
Z drugiej strony, zmiana bin / Activation to niezły hack i trzeba się zastanawiać, czy może to w pewnym momencie zepsuć rzeczy. Zwłaszcza, gdy środowiska wirtualne są używane w środowisku produkcyjnym.
Herbert
2
Wiele rzeczy psuje. Łatwiej jest po prostu odtworzyć lub sklonować virtualenv. Próbowałem to zrobić (czekając na otwarcie serwera proxy, abym mógł ponownie zainstalować wszystkie wymagane pakiety i po prostu zacząć od zera), ale nie działa! Myślałem, że jestem sprytny, ale niestety zajmie to dużo hakowania, aby to uruchomić, i szczerze mówiąc, jest dużo lepszych rzeczy do zrobienia.
horcle_buzz