To pytanie nie jest powtórzeniem.
Dotyczy to nie tylko zmiany nazwy środowiska wirtualnego, ale faktycznego przeniesienia go do innego katalogu, w tym potencjalnie do katalogu innego użytkownika.
To nie to samo, co zwykła zmiana nazwy środowiska wirtualnego, zwłaszcza dla osób niezaznajomionych z wirtualnymi envami.
Jeśli utworzę virtualenv i przeniosę go do innego folderu, czy nadal będzie działać?
$ virtualenv -p /usr/bin/python3 /home/me/Env/my-python-venv
$ source Env/my-python-venv/bin/activate
(my-python-venv) $
... później tego dnia wirtualne środowisko PRZENOSIŁO SIĘ ...
(my-python-venv) $ deactivate
$ mkdir -p /home/me/PeskyPartyPEnvs
$ mv /home/me/Env/my-python-venv /home/me/PeskyPartyPEnvs/
Pytanie:
Czy to zadziała?
$ source /home/me/PeskyPartyPEnvs/my-python-venv/bin/activate
(my-python-venv) $ /home/me/PeskyPartyPEnvs/my-python-venv/bin/pip3 install foaas
Mam tu na myśli mniejszą kwestię dotyczącą sensowności próbowania tego (chyba że ta mądrość jest oczywiście zabawna), a więcej, czy jest to możliwe. Naprawdę chcę wiedzieć, czy można to zrobić w Pythonie 3, czy też muszę to po prostu wyssać i sklonować.
Mogę tylko tak bez smutku? Chcę uniknąć smutku.mv
virtualenv
źródło
Scripts
(odpowiednikbin
on * nix) i mówi coś w stylu, że wactivate.ps1 cannot be made relative (it's not a normal script that starts with #!c:\..python.exe.
zasadzie narzeka, że hash-bang w pliku Nagłówek nie jest bieżącym python.exe virtualenv, jest to ten, z którego go przeniosłem - łatwa naprawa. Zajrzałem do tego szykownego scenariusza, a on i tak już odkrywa własną ścieżkę - fajnie. Niektóre inne skrypty również nie opierają się na ścieżkach (np. Dezaktywować.bat), więc w skrócie to działa.activate.ps1 cannot be made relative
można zignorować, ponieważ ten skrypt jest już względny. Komunikat nie jest pomocny w systemie Windows, ponieważ skrypty nie używają#!
dyrektyw, jak w Linuksie, aby powiedzieć powłoce, która aplikacja powinna ją wykonać. Nieactivate.bat
jest modyfikowany, ale nie jest używany (przynajmniej w Windows 10, wywołanieactivate
uruchamia skrypt PoSH), więc nie, nie musiałem edytować żadnych skryptów. Problem polega napip.exe
tym, że ścieżka do Pythona jest zakodowana na stałe i wymaga edycji za pomocą edytora szesnastkowego lub po prostu ponownej instalacji.pip freeze
pliku wymagań, abyś mógł łatwo ponownie zainstalować wszystkie swoje pakiety, docker (działa dobrze z zainstalowanym na nim virtualenv), conda, pyenv lub inne narzędzia. Powinieneś móc tworzyć i niszczyć środowiska jako niezmienną infrastrukturę, nie powinny one być cenne.Dla Pythona 3.3+ (z nowym
venv
wbudowanym modułem)Krótka odpowiedź (niezależnie od wersji):
Długa odpowiedź:
Począwszy od wersji 3.3, Python
virtualenv
stał się wbudowanym modułem o nazwievenv
.--relocatable
Opcja wspomniano w innych odpowiedzi nie została włączonavenv
, a obecnie nie ma dobra, bezpieczna droga, że jestem świadom, aby zmienić nazwę lub przenieść do wirtualnego środowiska Pythona.Istnieje jednak dość prosty sposób na odtworzenie środowiska wirtualnego ze wszystkimi aktualnie zainstalowanymi pakietami. Zobacz tę odpowiedź lub zobacz sekcję poniżej, aby uzyskać informacje na temat odtwarzania środowiska wirtualnego. Podczas tego procesu możesz odtworzyć nowe środowisko w dowolnym miejscu i pod dowolną nazwą. Lub zobacz sekcję poniżej, aby zapoznać się z procesem.
W tej odpowiedzi wspomina o kilku innych pakietach innych firm, które mogą obsługiwać bezpośrednie zmiany nazw lub ruchy. Jeśli zależy Ci na znalezieniu sposobu na przeniesienie środowiska wirtualnego w nienaruszonym stanie, możesz sprawdzić, czy one
venv
również działają.Uwaga: w tej odpowiedzi skupia się
virtualenv
raczej na niżvenv
. Zobacz poniżej, jak tłumaczyć.venv
w porównaniu ze starsząvirtualenv
składnią poleceńPolecenie do użycia
venv
to:a nie tylko
virtualenv
, który instaluje się jako polecenie w oryginalnym pakiecie. Gdzie „python” odnosi się do tego, jak uruchamiasz plik wykonywalny pythona, którym może być wiele różnych rzeczy, takich jak:python
py
lubpy -3.7
podobny ( Python Launcher for Windows for Python 3.3+ i Windows tylko w tej chwili)python3
(konwencja dla środowisk linux, które instalują podwójnie Python 2 i 3)c:\program files\python37\python.exe
Jeśli nie masz pewności, która wersja jest uruchamiana, zawsze możesz
python --version
się dowiedzieć.Jak odtworzyć środowisko wirtualne
Tworzenie / odtwarzanie wirtualnego środowiska jest łatwe i powinno stać się drugą naturą po dłuższej pracy z nim. Ten proces odzwierciedla to, co zrobiłbyś, aby rozpowszechnić swój skrypt jako pakiet (wraz z jego zależnościami) w pierwszej połowie, a następnie co ktoś zrobiłby, aby zainstalować twój skrypt / pakiet do dalszego rozwoju.
Najpierw uzyskaj zaktualizowaną listę tego, co znajduje się w środowisku wirtualnym. Gdy jest aktywna, pobierz wersję Pythona, której używa, i zapisz listę zależności do pliku.
Używaj
python --version
z aktywowanym środowiskiem wirtualnym, aby zobaczyć, jakiej wersji Pythona używa.Służy
python -m pip freeze > requirements.txt
do tworzenia listy bieżących zależności pakietów i umieszczania ich wrequirements.txt
pliku. To polecenie na pewno działa w systemie Linux lub Git Bash - nie mam 100% pewności co do Powershell lub wiersza poleceń w systemie Windows.Teraz utwórz nowe środowisko wirtualne, a następnie dodaj zależności ze starego.
Zrób swój nowy venv.
python
jako poleceniapython.exe
w folderze środowiska wirtualnegopython -m venv my_new_venv
do tworzenia nowego środowiska wirtualnego w bieżącym katalogu roboczym w nowymmy_new_venv
folderze.Zainstaluj zależności z
requirements.txt
pliku.python -m pip install -r requirements.txt
Może być konieczne ponowne zainstalowanie pakietów lokalnych, które są w trybie programowania.
Uwaga, jeśli kiedykolwiek będziesz potrzebować zobaczyć konkretną lokalizację, w której pakiet jest zainstalowany, użyj:
python -m pip list -v
-v
lub „verbose” doda dodatkowe informacje o każdym zainstalowanym pakiecie, w tym o ścieżce, w której jest on zainstalowany. Jest to przydatne, aby upewnić się, że pakiety wirtualne, zainstalowane przez użytkownika i zainstalowane przez system są proste.W tym momencie możesz po prostu usunąć stary folder venv i całą zawartość. Zalecam używanie do tego GUI - usuwanie plików jest często trwałe z linii poleceń Linuksa, a mała literówka może być złą wiadomością.
źródło
pip wheel . -w wheels
a następnie po prostu ponownie zainstalować pakiety w nowym środowisku wirtualnym zpip install --no-index --find-links /path/to/wheels/ -r requirements.txt
--relocatable
Argumentvirtualenv
wydaje pozwalają to zrobić.źródło
virtualenv --relocatable my-python-venv
gdy środowisko już istnieje.--help
:This fixes up scripts and makes all .pth files relative
. Nie, to nie spowoduje, że biblioteki będą niezależne od platformy. Jeśli chcesz przenieść go na inną platformę, musisz zainstalować go ponownie w oparciu o lokalny Python.ALE NIESTETY:
Nie, po prostu nie możesz
mv
. Istnieją obejścia, ale ponowna instalacja może być łatwiejsza.(my-python-venv)$ /home/me/PeskyPartyPEnvs/pip3 install foaas zsh: /home/me/PeskyPartyPEnvs/pip3: bad interpreter: /home/me/Env/my-python-venv/bin/python3: no such file or directory (my-python-venv)$ deactivate $
... naciska
enter
mocno z frustracji, a następujące rzeczy działająTyle że nie jest z
my-python-venv
, ergo smutku.Chcesz
mv
TWOJEJvirtualenv
i używać go, inaczej niemodyfikowana?Krótka odpowiedź:
Cóż, nie możesz .
źródło
find bin -type f -exec ex -sc "%s,${FROM},${PWD},g|x" {} \;
zakładanie, że twój bin i lib znajdują się w twoim bieżącym folderze venv. Używam tego jako szybkiego i brudnego sposobu na kopiowanie i przenoszenie wirtualnych środowisk env python3 z wieloma zainstalowanymi pakietami pip.--relocatable
? Poza tym, Nathanie, świetne pytanie, ale to okropna odpowiedź. Zaakceptowanie własnej odpowiedzi jest zawsze trochę stronnicze, chyba że jest dobrze napisana i jasno wylicza opcje, ale i tak określa, że ty i tak będziesz subiektywny.mv
sprzedać?”, A odpowiedź brzmi „nie, nie możesz po prostumv
, istnieją obejścia, ale może być łatwiejsza ponowna instalacja”. Gdyby to była najlepsza odpowiedź, zaoszczędziłoby mi to i innym trochę czasu.Tak, powinno to być możliwe, jeśli nie zrobiłeś niczego, co zależy od bieżącego katalogu virtualenv.
Jeśli jednak masz wybór, najlepiej jest utworzyć nowy virtualenv i zamiast tego zacząć używać nowego virtualenv. Jest to najbezpieczniejszy wybór i najmniej prawdopodobny późniejszy problem.
Dokumentacja wspomina, że :
Na przykład, jeśli uruchomiłeś
setvirtualenvproject
, nie będzie w stanie przełączyć się do właściwego katalogu po uruchomieniuworkon ...
więc w takim przypadku musisz to naprawić ręcznie.Ogólnie virtualenv to niewiele więcej niż katalog z niezbędnymi plikami interpretera języka Python oraz pakietami, których potrzebujesz.
źródło
Korzystając z odpowiedzi na ten i inne wątki na podobny temat, stworzyłem skrypt bash, który, zlokalizowany i wykonany w samym katalogu virtualenv pomoże w twoich ruchach w virtualenv.
Po wykonaniu tej czynności
virtualenv --relocatable yourenv
będziesz musiał zmieniaćVIRTUAL_ENV
zmienną za każdym razem, gdy przenosisz katalog, więc jeśli nie chcesz zmieniać jej ręcznie, użyj tego.#!/bin/bash \n DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" EXISTING=$(grep 'VIRTUAL_ENV=' bin/activate) NEWDIR=VIRTUAL_ENV=\"$DIR\" sed -i -e "s|$EXISTING|$NEWDIR|" bin/activate source bin/activate
Mam nadzieję, że to pomoże.
źródło
TAK, MOŻESZ! (W
windows
)Obejście jest łatwe, po prostu przenieś swoje wirtualne środowisko w dowolne miejsce, a następnie edytuj
activate.bat
w nimscripts\
:Przejdź do środowiska wirtualnego do żądanego katalogu
Kliknij prawym przyciskiem myszy i edytuj
activate.bat
wvenv_folder\scripts
.Zmień
VIRTUAL_ENV
zmienną z:w
Zapisz edytowany plik wsadowy i to wszystko!
UWAGA: Moje rozwiązanie powinno działać i zapisywać
windows users
konfigurację nowych środowisk wirtualnych, wątpię, aby zadziałało w innym systemie operacyjnym, ponieważ.bat
pochodzi zMS-DOS
źródło
old_directory
naold_directory
- czy to literówka?