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ć?


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!


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.


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]

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.


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/
    

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?

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.