Как переименовать virtualenv в Python?
Я неправильно написал имя virtualenv
при инициализации с помощью:
$ virtualenv vnev
Я на самом деле намеревался создать среду с именем venv
, Попробовав переименовать vnev
папка для venv
Я считаю, что это не очень помогает. Имя среды активации все еще переименовывает старую vnev
,
$ mv vnev venv
$ . venv/bin/activate
(vnev) $ deactivate
Я хотел бы знать, как идти о переименовании среды?
7 ответов
По умолчанию virtualenv не поддерживает переименование сред. Безопаснее просто удалить каталог virtualenv и создать новый с правильным именем. Вы можете сделать это:
- Активируйте свой virtualenv:
source vnev/bin/activate
- Создайте файл require.txt для установленных на данный момент пакетов:
pip freeze > requirements.txt
- Удалить неправильно написанное virtualenv:
rm -r vnev/
- Создайте новый virtualenv с правильным именем:
virtualenv venv
- Активировать новый virtualenv:
source venv/bin/activate
- Установите пакеты из файла needs.txt:
pip install -r requirements.txt
Если воссоздание не вариант, могут быть полезны сторонние инструменты, такие как virtualenv-mv.
В качестве альтернативы вы можете использовать virtualenvwrapper, который обеспечивает cpvirtualenv
Команда скопировать или переименовать в virtualenvs.
Если вы используете virtualenvwrapper, это может быть сделано:
$ cpvirtualenv <wrong_name> <correct_name>
$ rmvirtualenv <wrong_name>
Шаги, которые я использую для переименования виртуальной среды:
- Скопируйте всю папку виртуальной среды в новую виртуальную среду.
cp -a old_venv new_venv
- Использовать
sed
в пределахnew_venv/bin
папка для прямого изменения ссылок наold_v.env
cd new_venv/bin
sed -i 's/old_venv/new_venv/g' *
- Удалите старую виртуальную среду
rm -rf old_env
Может потребоваться переустановка ipykernel для jupyter, но в остальном все работает нормально
В
windows
Я смог легко переименовать свою виртуальную среду, отредактировав
activate.bat
внутри
scripts\
:
Сделайте резервную копию оригинала
activate.bat
(Я скопировал и вставил, а затем переименовал свойBACKUP_activate.bat
).Щелкните правой кнопкой мыши и отредактируйте
activate.bat
.+ Изменить
VIRTUAL_ENV
переменная из:set VIRTUAL_ENV=C:\some_dir\old_venv_name
в
set VIRTUAL_ENV=C:\some_dir\new_venv_name
+ Изменить
PROMPT
переменная из:set PROMPT=(old_venv_name) %PROMPT%
в
set PROMPT=(new_venv_name) %PROMPT%
Сохраните отредактированный командный файл
ПРИМЕЧАНИЕ: мое решение должно работать и сохранять
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.
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.
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+.