Zmiana nazwy folderu virtualenv bez jego łamania

Utworzyłem folder i zainicjowałem w nim instancję virtualenv.

$ mkdir myproject
$ cd myproject
$ virtualenv env

Kiedy uruchamiam (env)$ pip freeze, pokazuje zainstalowane pakiety tak, jak powinny.

Teraz chcę zmienić nazwę myproject/ na project/.

$ mv myproject/ project/

Jednak teraz, kiedy uciekam

$ . env/bin/activate
(env)$ pip freeze

PIP nie jest zainstalowany. Jak zmienić nazwę folderu projektu bez niszczenia środowiska?

Author: Riley Watkins, 2011-07-08

8 answers

Musisz dostosować instalację, aby używać ścieżek względnych. virtualenv zapewnia to za pomocą opcji --relocatable. Z docs :

Normalnie środowiska są powiązane z konkretna ścieżka. To znaczy, że ty nie może poruszać się po otoczeniu lub skopiuj na inny komputer. Możesz napraw środowisko, aby go relocatable with the command:

$ virtualenv --relocatable ENV

Uwaga: ENV to nazwa środowiska wirtualnego i musisz to uruchomić spoza katalogu ENV.

To spowoduje, że niektóre pliki created by setuptools or distribute użyj ścieżek względnych i zmieni się wszystkie skrypty do wykorzystania activate_this.py zamiast używać lokalizacja interpretera Pythona do wybierz środowisko.

Uwaga: musisz uruchomić to po zainstalowanie dowolnych pakietów w środowisko. Jeśli dokonasz środowiska, a następnie zainstalować nowy pakiet, musisz uruchomić virtualenv -/ align = "left" /

 132
Author: ire_and_curses,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-14 10:33:37

Wierzę w to "knowing why" matters more than "knowing how". Oto inne podejście, aby to naprawić.

Kiedy biegniesz:

$ . env/bin/activate

W rzeczywistości wykonuje następujące polecenia:

( testuję to w /tmp)

VIRTUAL_ENV="/tmp/myproject/env"
export VIRTUAL_ENV

Jednak właśnie zmieniłeś nazwę myproject na project, więc ta komenda nie została wykonana. Dlatego jest napisane pip is not installed, ponieważ ani ty nie zainstalowałeś pip w środowisku globalnym Systemu, ani twój virtualenv {[7] } nie jest prawidłowo pozyskiwany.

Jeśli chcesz to naprawić ręcznie, To jest sposób:

  1. Modyfikuj /tmp/project/env/bin/activate swoim ulubionym edytorem jak Vim, zwykle w Line 42

    VIRTUAL_ENV='/tmp/myproject/env' => VIRTUAL_ENV='/tmp/project/env'

  2. /tmp/project/env/bin/pip W Line 1

    #!/tmp/myproject/env/bin/python => #!/tmp/project/env/bin/python

Następnie aktywuj swoje wirtualne środowisko env ponownie, a zobaczysz, że twoje {7]} wróciło ponownie.

 88
Author: holys,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-06 13:14:14

Uwaga: jako @jb. zwraca uwagę, że rozwiązanie to dotyczy tylko łatwo (ponownie)utworzonych virtualenv s. jeśli instalacja środowiska zajmuje kilka godzin, To rozwiązanie to nie jest zalecane


Virtualenvs są świetne, ponieważ są łatwe do wykonania i przełączania; chronią przed zablokowaniem w jednej konfiguracji. Jeśli znasz wymagania projektu lub możesz je uzyskać, Stwórz Nowy virtualenv:

  • Utwórz requirements.txt plik

    (env)$ pip freeze > requirements.txt

    • Jeśli nie możesz utworzyć pliku requirements.txt, Sprawdź env/lib/pythonX.X/site-packages przed usunięciem oryginalnego env.
  • Usuń istniejące (env)

    deactivate && rm -rf env

  • Utwórz nowy virtualenv, aktywuj go i zainstaluj wymagania

    virtualenv env && . env/bin/activate && pip install -r requirements.txt


Możesz też użyć virtualenvwrapper, aby ułatwić pracę, ponieważ wszystkie virtualenvy są przechowywane w scentralizowanej lokalizacji]}
$(old-venv) pip freeze > temp-reqs.txt
$(old-venv) deactivate
$ mkvirtualenv new-venv
$(new-venv) pip install -r temp-reqs.txt
$(new-venv) rmvirtualenv old-venv
 32
Author: bnjmn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-19 09:19:52

Zawsze instaluję virtualenvwrapper, aby pomóc. Z podpowiedzi powłoki:

pip install virtualenvwrapper

Istnieje sposób udokumentowany w dokumentach virtualenvwrapper - cpvirtualenv To właśnie robisz. Upewnij się, że jesteś poza środowiskiem i wróć do monitu powłoki. Wpisz to z wymaganymi nazwami:

cpvirtualenv oldenv newenv

A następnie, jeśli to konieczne:

rmvirtualenv oldenv

Aby przejść do twojego newenv:

workon newenv
 26
Author: Afrowave,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-29 14:05:51

Możesz rozwiązać swój problem, wykonując następujące kroki:

  1. Zmień nazwę katalogu
  2. powtórz to: $ virtualenv ..\path\renamed_directory
  3. virtualenv poprawi skojarzenia katalogów podczas pozostawienia pakietów w miejscu
  4. $ scripts/activate
  5. $ pip freeze aby sprawdzić, czy twoje pakiety są na miejscu
  6. ważne zastrzeżenie, jeśli masz jakieś statyczne zależności ścieżek w plikach skryptów w katalogu virtualenv, będziesz musiał ręcznie je zmienić.
 13
Author: ryankdwyer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-07 01:57:37

Jeszcze innym sposobem, który działał mi wiele razy bez problemów, jest virtualenv-clone :

pip install virtualenv-clone
virtualenv-clone old-dir/env new-dir/env
 8
Author: Antony Hatchkins,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-26 11:09:06

(wewnątrz folderu projektu)

cd bin
sed -i 's/old_dir_name/new_dir_name/g' *

Nie zapomnij dezaktywować i aktywować

 3
Author: Ignacio,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-03 14:35:21

virtualenv --relocatable ENV nie jest to pożądane rozwiązanie. Zakładam, że większość ludzi chce mieć możliwość zmiany nazwy virtualenv bez żadnych długoterminowych skutków ubocznych.

Więc stworzyłem proste narzędzie do tego. Strona projektu virtualenv-mv przedstawia go nieco bardziej szczegółowo, ale zasadniczo możesz użyć virtualenv-mv tak jak używasz prostej implementacji mv (bez żadnych opcji).

Na przykład:

virtualenv-mv myproject project
Proszę jednak pamiętać, że właśnie to zhakowałem. Może się zepsuć w nietypowych okolicznościach (np. wirtualne łącza symboliczne), więc proszę uważać (zrób kopię zapasową tego, czego nie możesz stracić) i daj mi znać, jeśli napotkasz jakiekolwiek problemy.
 1
Author: Six,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-29 14:55:21