Czy istniejący virtualenv można z wdziękiem zaktualizować?

95

Mam virtualenv utworzonego dla Pythona 2.5 i chcę go "zaktualizować" do Pythona 2.6.

Oto, jak został pierwotnie skonfigurowany:

virtualenv --no-site-packages -p python2.5 myenv

Teraz uruchamiam virtualenv w tym samym katalogu, aby zaktualizować:

virtualenv --no-site-packages -p python2.6 myenv
...
Not overwriting existing python script myenv/bin/python (you must use myenv/bin/python2.6)
...
Overwriting myenv/bin/activate with new content

Domyślny Python to nadal 2.5, chociaż mogę również określić 2.6. Czy istnieje sposób, aby całkowicie usunąć 2.5 i zamiast tego ustawić „bin / python” na 2.6?

Matt Norris
źródło

Odpowiedzi:

64

Możesz użyć virtualenv w języku Python 2.6 do „rewitalizacji” istniejącego katalogu. Będziesz jednak musiał ponownie zainstalować wszystkie zainstalowane moduły. Często mam katalog wirtualny do tworzenia modułu, a virtualenv ten sam katalog z wieloma wersjami Pythona i działa dobrze. :)

Lennart Regebro
źródło
1
Dzięki! Wypróbowałem twoją metodę i widzę, że skrypt „aktywuj” został zaktualizowany, ale stara wersja pozostaje (zobacz poprawione pytanie). Czy możesz podać przykład?
Matt Norris
13
możesz po prostu usunąć plik wykonywalny bin / python w virtualenv przed ponownym uruchomieniem virtualenv z pythonem 2.6.
Carl Meyer
9
Cóż, może to działało - ale dlaczego? Dużą atrakcją virtualenvjest to, że łatwo i tanio tworzy odtwarzalne środowiska Pythona. Po co majstrować przy jednym i nie mieć pewności, że wszystko naprawiłeś lub że możesz to odtworzyć ponownie lub że zakłócasz środowisko produkcyjne, skoro możesz po prostu zrobić nowe, czyste?
Ned Deily
9
@Ned: Virtualenv nie tworzy odtwarzalnych środowisk, tworzy izolowane środowiska. Aby je odtworzyć, musisz również zainstalować wszystko w ten sam sposób, virtualenv do tego nie wystarczy. zc.buildout jest tam lepszy.
Lennart Regebro
1
@Ned: punkt zajęty; to jest środowisko programistyczne, w którym pracowałem. Chciałem zachować je w wersji 2.5, chyba że absolutnie potrzebowałem zrobić 2.6. Taka potrzeba pojawiła się, więc byłem ciekawy, czy możesz zaktualizować izolowane środowisko, aby zobaczyć wpływ na swój kod, bez konieczności przebudowywania i kopiowania / wklejania katalogów do nowej wersji env.
Matt Norris
25

W Pythonie 3.3+ venv obsługuje flagę --upgrade

  --upgrade             Upgrade the environment directory to use this version
                        of Python, assuming Python has been upgraded in-place.

Stosowanie:

python -m venv --upgrade YOUR_VENV_DIRECTORY

Właśnie zaktualizowałem venv z Pythona 3.7.x do 3.8 w kilku projektach bez żadnego problemu.

Vlad Bezden
źródło
1
„zakładając, że Python został uaktualniony w miejscu” ... to niestety wydaje się oznaczać, że jeśli mój system python3wskazuje na 3.6, nie mogę utworzyć, python3przejdź do punktu 3.7 w moim venv
joel
4

Powinieneś utworzyć nowe virtualenvużycie, python2.6a następnie, po aktywowaniu nowego środowiska, użyj jego python2.6i jego, easy_installaby zainstalować nowe wersje dowolnych pakietów witryny, których potrzebujesz. Uważaj, że ścieżka do virtualenvpliku jest połączona na stałe z różnymi plikami w środowisku, więc kiedy będziesz gotowy do przełączenia się na to, albo zmień swoje skrypty startowe i tak dalej, aby odnosić się do nowej virualenvścieżki, lub bardzo ostrożnie kopiuj ją do stary katalog i modyfikując nazwy ścieżek w nim.

Ned Deily
źródło
3

Zainstaluj drugi Python na CentOS

  1. pobierz python
  2. zainstaluj, aby porównać lokalne

    configure --prefix=/opt/virtualenv/python 
    make && make install
    
  3. utwórz wirtualne środowisko w nowym języku Python

    virtualenv /opt/virtualenv --python=/opt/python276/bin/python
    

    uwaga: w razie potrzeby można to zrobić z innym użytkownikiem

    chown pyuser -R /opt/virtualenv
    su - pyuser
    source /opt/virtualenv/bin/activate
    python -v
    
  4. Utwórz wirtualne środowisko:

    virtualenv /opt/virtualenv
    su - infograficos
    source bin/activate
    
  5. Zainstaluj pip za pomocą Pythona 2.7 (wewnątrz virtualenv)

    easy_install pip 
    
Xoroz
źródło
0

Jeśli używasz OS X, wypróbuj to, jeśli chcesz zaktualizować Pythona do nieznacznie zwiększonej wersji (np. 2.7.6 do 2.7.8), zachowując jednocześnie działanie bibliotek innych firm.

Działa dla mnie na 5 różnych środowiskach wirtualnych z zainstalowanym Django.

Rockallite
źródło