Как переименовать virtualenv в Python?

Я неправильно написал имя virtualenv при инициализации с помощью:

$ virtualenv vnev

Я на самом деле намеревался создать среду с именем venv, Попробовав переименовать vnev папка для venvЯ считаю, что это не очень помогает. Имя среды активации все еще переименовывает старую vnev,

$ mv vnev venv
$ . venv/bin/activate
(vnev) $ deactivate

Я хотел бы знать, как идти о переименовании среды?

7 ответов

Решение

По умолчанию virtualenv не поддерживает переименование сред. Безопаснее просто удалить каталог virtualenv и создать новый с правильным именем. Вы можете сделать это:

  1. Активируйте свой virtualenv: source vnev/bin/activate
  2. Создайте файл require.txt для установленных на данный момент пакетов: pip freeze > requirements.txt
  3. Удалить неправильно написанное virtualenv: rm -r vnev/
  4. Создайте новый virtualenv с правильным именем: virtualenv venv
  5. Активировать новый virtualenv: source venv/bin/activate
  6. Установите пакеты из файла needs.txt: pip install -r requirements.txt

Если воссоздание не вариант, могут быть полезны сторонние инструменты, такие как virtualenv-mv.

В качестве альтернативы вы можете использовать virtualenvwrapper, который обеспечивает cpvirtualenv Команда скопировать или переименовать в virtualenvs.

Если вы используете virtualenvwrapper, это может быть сделано:

$ cpvirtualenv <wrong_name> <correct_name>
$ rmvirtualenv <wrong_name>

Шаги, которые я использую для переименования виртуальной среды:

  1. Скопируйте всю папку виртуальной среды в новую виртуальную среду.
      cp -a old_venv new_venv
  1. Использовать sed в пределах new_venv/bin папка для прямого изменения ссылок на old_v.env
      cd new_venv/bin
sed -i 's/old_venv/new_venv/g' *
  1. Удалите старую виртуальную среду
      rm -rf old_env

Может потребоваться переустановка ipykernel для jupyter, но в остальном все работает нормально

В windows Я смог легко переименовать свою виртуальную среду, отредактировав activate.bat внутри scripts\:

  1. Сделайте резервную копию оригинала activate.bat (Я скопировал и вставил, а затем переименовал свой BACKUP_activate.bat).

  2. Щелкните правой кнопкой мыши и отредактируйте activate.bat.

  3. + Изменить VIRTUAL_ENV переменная из:

     set VIRTUAL_ENV=C:\some_dir\old_venv_name
    

    в

     set VIRTUAL_ENV=C:\some_dir\new_venv_name
    
  4. + Изменить PROMPT переменная из:

     set PROMPT=(old_venv_name) %PROMPT%
    

    в

     set PROMPT=(new_venv_name) %PROMPT%
    
  5. Сохраните отредактированный командный файл

ПРИМЕЧАНИЕ: мое решение должно работать и сохранять windows users настройка новых виртуальных сред, я не знаю сценариев или чего-то еще в Linux или других операционных системах

cpvirtualenv из virtualenv-wrapper из-за ошибки я пытался запустить virtualenv-clone, но запуск этого напрямую работал нормально:

      virtualenv-clone ~/.virtualenvs/oldname ~/.virtualenvs/newname
workon newname
rmvirtualenv oldname

Не нужно ничего переустанавливать.

My answer is similar to creating a new virtual environment with the dependencies of the old one, but this one is succinct.

  1. Clone the old environment (say venv_1) to a new environment (say venv_2) using conda.

    conda create -n venv_2 --clone venv_1

This creates a new environment venv_2 cloning the venv_1. Hence no separate task of getting the packages/ dependencies. Single step suffices.

  1. Delete the old virtual environment. [This step is optional if you still want to keep the old environment]

    rm -rf "fully qualified path of the old virtual environment"

So in 1/2 steps the task can be achieved.

TL;DR

входит в состав virtualenvwrapper

virtualenv-clone /path/to/old/venv /path/to/new/venv

Альтернативно

Вы также можете попробовать cpvirtualenv

cpvirtualenv /path/to/old/venv /path/to/new/venv

Но cpvirtualenv ожидает /path/to/old/venv существовать внутри $WORKON_HOMEа если это не так, он терпит неудачу. Поскольку это вызывает virtualenv-cloneвы также можете использовать это вместо этого; чтобы избежать ошибок вроде

      mark@Desktop:~/venvs$ cpvirtualenv ./random/ $WORKON_HOME/random
Copying random as /home/mark/.virtualenvs/venvs/random...
Usage: virtualenv-clone [options] /path/to/existing/venv /path/to/cloned/venv

virtualenv-clone: error: src dir '/home/mark/.virtualenvs/venvs/random' does not exist

Предупреждение согласно документации virtualenvwrapper

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

Что он на самом деле делает? Согласно virtualenv-клон PyPi страницы

Скрипт для клонирования не перемещаемого файла virtualenv.

Virtualenv предоставляет способ сделать виртуальный объект перемещаемым, который затем можно было бы скопировать, как мы хотели. Однако создание перемещаемого virtualenv таким образом нарушает изоляцию virtualenv без пакетов, а также другие аспекты, которые связаны с относительными путями и / usr / bin / env shebang, что может быть нежелательным.

Кроме того, перезапись .pth и .egg-link не работает должным образом. Это попытка преодолеть эти проблемы и предоставить способ легко клонировать существующий файл virtualenv.

Он выполняет следующее:

копирует каталог sys.argv [1] в sys.argv [2]

обновляет жестко запрограммированную переменную VIRTUAL_ENV в сценарии активации в новое расположение репо. (--relocatable этого не касается)

обновляет shebangs различных скриптов в bin на новый Python, если они указывали на старый Python. (нумерация версий сохраняется.)

он также может изменить / usr / bin / env python shebangs, чтобы они были абсолютными, хотя эта функция в настоящее время не предоставляется.

проверяет sys.path клонированного virtualenv, и если какой-либо из путей взят из старой среды, он находит любые файлы ссылок .pth или .egg в sys.path, расположенные в новой среде, и проверяет, что все абсолютные пути к старой среде обновлены в новую среду.

наконец, он снова дважды проверяет sys.path и завершится ошибкой, если все еще есть пути из старой среды.

ПРИМЕЧАНИЕ. Для этого скрипта требуется Python 2.7 или 3.4+.

Другие вопросы по тегам