Переименование папки виртуальное окружение, не нарушая его



Я создал папку и инициализировал экземпляр virtualenv в ней.



$ mkdir myproject
$ cd myproject
$ virtualenv env


когда я запускаю (env)$ pip freeze, он показывает установленные пакеты, как это должно быть.



теперь я хочу переименовать myproject/ до project/.



$ mv myproject/ project/


однако теперь, когда я бегу



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


он говорит, что pip не установлен. Как переименовать папку проекта, не нарушая экологию?

773   8  

8 ответов:

вам нужно настроить установку, чтобы использовать относительные пути. virtualenv предусматривает это с помощью . От документы:

обычно среды привязаны к a конкретный путь. Это означает, что вы не удается переместить среду вокруг или скопировать его на другой компьютер. Вы можете исправьте среду, чтобы сделать это перемещается с помощью команды:

$ virtualenv --relocatable ENV

Примечание: Эд имя виртуальной среды, и вы должны запустить его из-за пределов каталога ENV.

это сделает некоторые из файлов созданные setuptools или распространить используйте относительные пути, и изменится все скрипты для использования activate_this.py вместо использования расположение интерпретатора Python в выберите среду.

Примечание: Вы должны запустить этот после того, как вы установлены любые пакеты в окружающая среда. Если вы сделаете окружающая среда перемещаемый, затем установите новый пакет, вы должны запустить virtualenv -- снова можно передислоцировать.

Я считаю, что "knowing why" matters more than "knowing how". Итак, вот еще один подход, чтобы исправить это.

при запуске:

$ . env/bin/activate

он фактически выполняет следующие команды:

(Я проверяю это в /tmp)

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

однако, вы только что переименовали myproject до project, так что команда не удалось выполнить. Вот почему он говорит pip is not installed, потому что ни вы не установили pip в глобальной среде системы ни ваш виртуальное окружение pip правильно поступает.

если вы хотите, чтобы исправить это вручную, вот так:

  1. изменить /tmp/project/env/bin/activate С вашим любимым редактором, как Vim, обычно в Line 42

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

  2. изменить /tmp/project/env/bin/pip на Line 1

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

после этого активируйте свою виртуальную среду env еще раз, и вы будете смотрите ваш pip снова вернулась.

Примечание: As @jb. указывает, что это решение применимо только к легко (повторно)созданному virtualenvs. Если для установки среды требуется несколько часов, это решение не рекомендуется


Virtualenvs великолепны, потому что их легко сделать и переключаться; они не позволяют вам попасть в одну конфигурацию. Если вы знаете требования проекта, или можете получить их,сделать новую virtualenv:

  • создать requirements.txt file

    (env)$ pip freeze > requirements.txt

    • если вы не можете создать , Регистрация env/lib/pythonX.X/site-packages перед удалением исходного env.
  • удалить существующий (env)

    deactivate && rm -rf env

  • создать новый virtualenv, активируйте его и установите требования

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


кроме того, использовать virtualenvwrapper, чтобы сделать вещи немного проще, так как все virtualenvs хранятся в централизованном месте

$(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

Я всегда устанавливаю virtualenvwrapper, чтобы помочь. Из командной строки:

pip install virtualenvwrapper

есть способ, задокументированный в документах virtualenvwrapper - cpvirtualenv Это то, что вы делаете. Убедитесь, что вы вышли из своей среды и вернулись к приглашению оболочки. Введите это с требуемыми именами:

cpvirtualenv oldenv newenv

и потом, если надо:

rmvirtualenv oldenv

чтобы перейти к вашему newenv:

workon newenv

вы можете исправить вашу проблему, выполнив следующие действия:

  1. переименовать свой каталог
  2. повтор этого: $ virtualenv ..\path\renamed_directory
  3. virtualenv исправит ассоциации каталогов, оставив ваши пакеты на месте
  4. $ scripts/activate
  5. $ pip freeze чтобы убедиться, что ваши пакеты находятся на месте
  6. важное предостережение, если у вас есть какие-либо статические зависимости пути в файлах скриптов в вашем каталоге virtualenv, вам придется вручную изменить те.

еще один способ сделать это, который работал для меня много раз без проблем является virtualenv-clone:

pip install virtualenv-clone
virtualenv-clone old-dir/env new-dir/env

(внутри папки проекта)

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

Не забудьте деактивировать и активировать

virtualenv --relocatable ENV не является желательным решением. Я предполагаю, что большинство людей хотят возможность переименовать virtualenv без любые долгосрочные побочные эффекты.

поэтому я создал простой инструмент, чтобы сделать именно это. Страница проекта virtualenv-mv очерчивает его немного более подробно, но по существу вы можете использовать virtualenv-mv так же, как вы бы использовали простую реализацию mv (без вариантов).

для пример:

virtualenv-mv myproject project

обратите внимание, однако, что я только что взломал это. Он может сломаться при необычных обстоятельствах (например, symlinked virtualenvs), поэтому, пожалуйста, будьте осторожны (резервное копирование того, что вы не можете позволить себе потерять) и дайте мне знать, если у вас возникнут какие-либо проблемы.

Comments

    Ничего не найдено.