Czy istnieje sposób na uaktualnienie wersji Pythona używanej w virtualenv (np. Jeśli pojawi się wydanie naprawiające błędy)?
Mógłbym pip freeze --local > requirements.txt
wtedy usunąć katalog i pip install -r requirements.txt
, ale to wymaga dużo ponownej instalacji dużych bibliotek, na przykład numpy
, których często używam.
Widzę, że jest to zaletą przy aktualizacji np. Z wersji 2.6 -> 2.7, ale co z wersją 2.7.x -> 2.7.y?
python
version
virtualenv
pip
Simon Walker
źródło
źródło
Odpowiedzi:
Widziałeś to ? Jeśli nie zrozumiałem tej odpowiedzi, możesz spróbować utworzyć nową virtualenv na szczycie starej. Musisz tylko wiedzieć, który python będzie używał twojego virtualenv (musisz zobaczyć wersję virtualenv).
Jeśli twoja virtualenv jest zainstalowana z tą samą wersją Pythona, co stara, a aktualizacja pakietu virtualenv nie jest opcją, możesz przeczytać to w celu zainstalowania virtualenv z żądaną wersją python.
EDYTOWAĆ
Przetestowałem to podejście (to, które tworzy nowy virtualenv na szczycie starego) i działało dobrze dla mnie. Myślę, że możesz mieć pewne problemy, jeśli zmienisz język z Pythona 2.6 na 2.7 lub 2.7 na 3.x, ale jeśli po prostu uaktualnisz w tej samej wersji (pozostanie na 2.7, jak chcesz), nie powinieneś mieć problemu, ponieważ wszystkie pakiety są przechowywane w tych samych folderach dla obu wersji Pythona (pakiety 2.7.xi 2.7.y znajdują się w twoim_env / lib / python2.7 /).
Jeśli zmienisz wersję virtualenv python, będziesz musiał ponownie zainstalować wszystkie swoje pakiety dla tej wersji (lub po prostu połącz potrzebne pakiety w folderze pakietów nowej wersji, tj .: twoja_env / lib / python_newversion / site-packages)
źródło
virtualenv
na szczycie starego, a nie pracę. Musiałem określić,-p
aby wskazać odpowiednią wersję Pythona.Jeśli akurat używasz modułu venv dostarczanego z Pythonem 3.3+, obsługuje on tę
--upgrade
opcję. Według dokumentów :źródło
venv
i nie chcą go naprawić na podstawie, że „możesz po prostu użyć virtualenv”. EDYCJA: właściwie to działa! Pokazuje również komunikat o błędzie dotyczący „surepip”.python3.6 -m venv --upgrade <path_of_existing_env>
bin/python
ibin/python3
nadal połączony ze starympython3.4
plikiem binarnym, musiałem ustawić linki ręcznie. Czy istnieje sposób na usunięcie nieaktualnej wersji Pythona?Error: Command '['/Users/me/Sites/site/venv3/bin/python3', '-Im', 'ensurepip', '--upgrade', '--default-pip']' returned non-zero exit status 1.
> co to znaczy? Nie widzę aktywnych procesów Pythona, nie mogę zaktualizować.python3.6 -m venv --upgrade ENV_DIR
, aby działał. Myślę, że nadal będę musiał zaktualizować niektóre dowiązania symboliczneENV_DIR/bin
. Dlatego sztuczka polegała na aktualizacji do nowej wersji Pythona, podczas gdy stara wersja była jeszcze zainstalowana.Zaktualizowany ponownie: Poniższa metoda może nie działać w nowszych wersjach virtualenv. Przed przystąpieniem do modyfikacji starej wersji virtualenv należy zapisać zależności w pliku wymagań (
pip freeze > requirements.txt
) i wykonać kopię zapasową w innym miejscu. Jeśli coś pójdzie nie tak, nadal możesz utworzyć nową virtualenv i zainstalować w niej stare zależności (pip install -r requirements.txt
).Zaktualizowano: Zmieniłem odpowiedź 5 miesięcy po pierwotnej odpowiedzi. Poniższa metoda jest wygodniejsza i bardziej niezawodna.
Efekt uboczny: naprawia również
Symbol not found: _SSLv2_method
wyjątek, gdy robisz toimport ssl
w środowisku wirtualnym po aktualizacji Pythona do wersji 2.7.8.Wskazówka: Obecnie jest to tylko Python 2.7.x .
Jeśli używasz Homebrew Python w systemie OS X, najpierw
deactivate
virtualenv, a następnie zaktualizuj Python:Uruchom następujące polecenia (
<EXISTING_ENV_PATH>
jest ścieżką środowiska wirtualnego):Na koniec utwórz ponownie środowisko wirtualne:
W ten sposób stare pliki podstawowe Pythona i biblioteki standardowe (plus
setuptools
ipip
) są usuwane, a zainstalowane biblioteki niestandardowesite-packages
są zachowywane i działają, gdy tylko znajdą się w czystym języku Python. Biblioteki binarne mogą wymagać ponownej instalacji, aby działały poprawnie.Działa to dla mnie w 5 środowiskach wirtualnych z zainstalowanym Django.
BTW, jeśli
./manage.py compilemessages
później nie działa, spróbuj tego:źródło
bin/python
plik.setuptools
ipip
jest konieczne.<EXISTING_ENV_PATH>/.Python
ponieważ zepsuło to tworzenie virtualenv.rmvirtualenv <env_name>
i usunie wszystkie zależności zależne od siebie :) Zobacz więcej na: virtualenvwrapper.readthedocs.io/en/latest/…Nie byłem w stanie utworzyć nowego virtualenv na starym. Istnieją jednak narzędzia w pip, które znacznie przyspieszają ponowną instalację wymagań w zupełnie nowej wersji. Pip może wbudować każdy element w pliku wymagania.txt w pakiet koła i przechowywać go w lokalnej pamięci podręcznej. Kiedy utworzysz nowy venv i uruchomisz w nim instalację pip, pip automatycznie użyje wstępnie zbudowanych kół, jeśli je znajdzie. Koła instalują się znacznie szybciej niż uruchamianie setup.py dla każdego modułu.
Mój ~ / .pip / pip.conf wygląda następująco:
Instaluję wheel (
pip install wheel
), a następnie biegampip wheel -r requirements.txt
. To przechowuje zbudowane koła w katalogu wheel w katalogu pip.conf.Odtąd za każdym razem, gdy instaluję dowolne z tych wymagań, instaluje je z kół, co jest dość szybkie.
źródło
Jak zaktualizować wersję Python dla istniejącego projektu virtualenvwrapper i zachować tę samą nazwę
Dodam odpowiedź dla każdego, kto korzysta z doskonałego wirtualnego narzędzia do tworzenia kopii Douga Hellmanna, ponieważ istniejące odpowiedzi nie zrobiły tego dla mnie.
Niektóre kontekst:
python3 -m venv
, nie obsługuje środowisk Python 2mkproject
który tworzy środowisko wirtualne, tworzy pusty katalog projektu i do niego dołącza dyski CDworkon
polecenia virtualenvwrapper do aktywacji dowolnego projektu niezależnie od wersji PythonaKierunki:
Powiedzmy, że twój projekt ma nazwę
foo
i obecnie działa w Pythonie 2 (mkproject -p python2 foo
), chociaż polecenia są takie same, czy uaktualnienie z wersji 2.x do wersji 3.x, 3.6.0 do 3.6.1 itd. Zakładam również, że „ są obecnie w aktywowanym środowisku wirtualnym.1. Dezaktywuj i usuń stare środowisko wirtualne:
Zauważ, że jeśli dodałeś jakieś niestandardowe polecenia do zaczepów (np.
bin/postactivate
), Musisz je zapisać przed usunięciem środowiska.2. Ukryj prawdziwy projekt w katalogu tymczasowym:
3. Utwórz nowe środowisko wirtualne (i katalog projektu) i aktywuj:
4. Zamień pusty wygenerowany katalog projektu na prawdziwy projekt, zmień z powrotem na katalog projektu:
5. Zainstaluj ponownie zależności, potwierdź nową wersję Pythona itp .:
Jeśli jest to częsty przypadek użycia, rozważę otwarcie PR, aby dodać coś takiego
$ upgradevirtualenv
/ /$ upgradeproject
do virtualenvwrapper.źródło
To podejście zawsze działa dla mnie:
Pochodzą z:
źródło
Przeniosłem swój katalog domowy z jednego komputera Mac na inny (Mountain Lion do Yosemite) i nie zdawałem sobie sprawy z zepsutego virtualenv, dopóki nie straciłem starego laptopa. Miałem punkt virtualenv do Pythona 2.7 zainstalowany,
brew
a ponieważ Yosemite był dostarczany z Pythonem 2.7, chciałem zaktualizować moją virtualenv do Pythona systemowego. Kiedy uruchomiłemvirtualenv
istniejący katalog, pojawiał sięOSError: [Errno 17] File exists: '/Users/hdara/bin/python2.7/lib/python2.7/config'
błąd. Podczas prób i błędów obejrzałem ten problem, usuwając kilka linków i naprawiając kilka ręcznie. Oto co w końcu zrobiłem (podobnie jak @Rockalite, ale prościej):Po tym mogłem uruchomić virtualenv na istniejącym katalogu.
źródło
W systemie OS X lub macOS przy użyciu Homebrew do instalacji i aktualizacji Python3 musiałem usunąć dowiązania symboliczne, zanim zacznę
python -m venv --upgrade ENV_DIR
działać.Zapisałem następujące rzeczy w upgrade_python3.sh, więc będę pamiętał, jak za kilka miesięcy muszę to zrobić ponownie:
AKTUALIZACJA: chociaż na początku wydawało się, że działa dobrze, kiedy uruchomiłem py.test, wystąpił błąd. Na koniec właśnie odtworzyłem środowisko z pliku wymagań.
źródło
py.test
nie działa, ponieważ `~ / .virtualenvs / myenv / bin / python3.7 nie jest dowiązaniem symbolicznym, więc nie jest aktualizowany.~/.virtualenvs/myenv/.Python
tym, że istnieje dowiązanie symboliczne.Jeśli używasz
pipenv
, nie wiem, czy możliwe jest uaktualnienie środowiska w miejscu, ale przynajmniej w przypadku drobnych uaktualnień wersji wydaje się być wystarczająco inteligentny, aby nie odbudowywać pakietów od zera podczas tworzenia nowego środowiska. Np. Od 3.6.4 do 3.6.5:źródło
Chcę tylko wyjaśnić, ponieważ niektóre odpowiedzi odnoszą się do
venv
innych, a inne odnoszą się do nichvirtualenv
.Użycie flagi
-p
lub--python
jest obsługiwanevirtualenv
, ale nie włączonevenv
. Jeśli masz więcej niż jedną wersję języka Python i chcesz określić, z którą chcesz ją utworzyćvenv
, zrób to w wierszu poleceń, tak jak to:Możesz oczywiście dokonać aktualizacji za pomocą,
venv
jak zauważyli inni, ale przy założeniu, że już zaktualizowałeś Python, który został użyty do jego stworzeniavenv
. Nie możesz dokonać aktualizacji do wersji Pythona, której gdzieś jeszcze nie masz w swoim systemie, więc najpierw upewnij się, że otrzymujesz wersję, którą chcesz, a następnie zrób z niej wszystkie potrzebne opcje.źródło
Krok 1: Zamroź wymóg i zrób kopię zapasową istniejącej środowiska
Krok 2: Zainstaluj Python 3.7 i aktywuj środowisko wirusowe
Krok 3: Zainstaluj wymagania
źródło
Dla każdego z problemem
Musisz zainstalować python3.6-venv
źródło