Этот вопрос не повторяется.
Это касается не только переименования виртуальной среды, но и фактического перемещения ее в другой каталог, в том числе, возможно, в каталог другого пользователя.
Это не то же самое, что просто переименование виртуальной среды, особенно для людей, незнакомых с virtualenvs.
Если я создам файл virtualenv и перенесу его в другую папку, он все равно будет работать?
$ virtualenv -p /usr/bin/python3 /home/me/Env/my-python-venv
$ source Env/my-python-venv/bin/activate
(my-python-venv) $
... позже в тот же день виртуальная среда ПЕРЕМЕЩАЕТСЯ ...
(my-python-venv) $ deactivate
$ mkdir -p /home/me/PeskyPartyPEnvs
$ mv /home/me/Env/my-python-venv /home/me/PeskyPartyPEnvs/
Вопрос:
Это сработает?
$ source /home/me/PeskyPartyPEnvs/my-python-venv/bin/activate
(my-python-venv) $ /home/me/PeskyPartyPEnvs/my-python-venv/bin/pip3 install foaas
Я имею в виду, что это не столько вопрос о целесообразности попробовать это (если, конечно, мудрость не юмористическая), сколько о том, возможно ли это. Я действительно хочу знать, возможно ли это сделать в Python 3, или мне просто нужно высосать и клонировать.
Могу ли я просто как , что без печали? Я действительно хочу избежать печали.mv
virtualenv
источник
Scripts
каталоге (эквивалентноbin
on * nix) и говорится что-то вродеactivate.ps1 cannot be made relative (it's not a normal script that starts with #!c:\..python.exe.
того, что в основном он жалуется, что хэш-бэнг в файле Заголовок - это не текущий файл python.exe virtualenv, это тот, который я переместил из -easy fixed. Я заглянул в этот шикарный скрипт, и он все равно обнаруживает свой собственный путь - приятно. Некоторые другие сценарии также не полагаются на пути (например, deactivate.bat), так что, короче говоря, это работает.activate.ps1 cannot be made relative
можно игнорировать, потому что этот сценарий уже является относительным. Это сообщение бесполезно в Windows, потому что сценарии не используют#!
директивы, как в Linux, чтобы сообщить оболочке, какое приложение должно его выполнить.activate.bat
Не модифицируются, но он не используется (по крайней мере , на окнах 10, вызовactivate
запускает скрипт POSH) , поэтому не мне не нужно редактировать скрипты. Проблема в том,pip.exe
что путь к python жестко запрограммирован и требует редактирования с помощью шестнадцатеричного редактора или просто переустановки.pip freeze
файла требований, чтобы вы могли легко переустановить все свои пакеты, докер (хорошо работает с установленным на нем virtualenv), conda, pyenv или некоторые другие инструменты. Вы должны иметь возможность создавать и уничтожать среды как неизменяемую инфраструктуру, они не должны быть драгоценными.Для Python 3.3+ (с новым
venv
встроенным модулем)Краткий ответ (независимо от версии):
Длинный ответ:
Начиная с Python v3.3,
virtualenv
он стал встроенным модулем с именемvenv
.--relocatable
Вариант уже упоминалось в других ответах не был включен вvenv
, и в настоящее время не существует хороший, безопасный способ , который я знаю либо переименованы или переместить виртуальную среду Python.Однако есть довольно простой способ просто воссоздать виртуальную среду со всеми ее текущими установленными пакетами. См. Этот ответ или информацию о воссоздании виртуальной среды в разделе ниже. Во время этого процесса вы можете воссоздать новую среду в любом месте и с любым именем. Или посмотрите раздел ниже, чтобы узнать о процессе.
В этом ответе он упоминает несколько других сторонних пакетов, которые могут поддерживать прямое переименование или перемещение. Если вы решили найти способ перенести виртуальную среду без изменений, вы можете проверить, работают ли они с этим
venv
.Примечание: в этом ответе основное внимание уделяется
virtualenv
, а неvenv
. См. Ниже, как перевести.venv
по сравнению со старымvirtualenv
синтаксисом командИспользуемая команда
venv
:а не просто
virtualenv
, который устанавливается как команда в исходном пакете. Где «python» относится к тому, как вы запускаете исполняемый файл python, который может быть разнообразным, например:python
py
илиpy -3.7
аналогичный ( Python Launcher для Windows для Python 3.3+ и Windows только на данный момент)python3
(соглашение для сред Linux, в которых устанавливаются два Python 2 и 3)c:\program files\python37\python.exe
Если вы не уверены, какая версия запущена, вы всегда
python --version
можете узнать.Как воссоздать виртуальную среду
Создавать / воссоздавать виртуальную среду легко и должно стать вашей второй натурой после того, как вы немного поработаете с ними. Этот процесс отражает то, что вы сделали бы для распространения вашего скрипта в виде пакета (с его зависимостями) в первой половине, а затем то, что кто-то сделает, чтобы установить ваш скрипт / пакет для дальнейшей разработки.
Сначала получите обновленный список того, что находится в виртуальной среде. Когда он активен, получите версию Python, которую он использует, и сохраните список зависимостей в файл.
Используйте
python --version
с активированной виртуальной средой, чтобы узнать, какую версию Python она использует.Используйте
python -m pip freeze > requirements.txt
для создания списка текущих зависимостей пакета и помещения их вrequirements.txt
файл. Эта команда наверняка работает в Linux или Git Bash - не на 100% уверена в Powershell или командной строке в Windows.Теперь создайте новую виртуальную среду, а затем добавьте зависимости от старой.
Сделайте свой новый Venv.
python
как командуpython.exe
в папке виртуальной средыpython -m venv my_new_venv
для создания новой виртуальной среды в текущем рабочем каталоге в новойmy_new_venv
папке.Установите свои зависимости из
requirements.txt
файла.python -m pip install -r requirements.txt
Возможно, вам потребуется переустановить локальные пакеты, находящиеся в режиме разработки.
Обратите внимание: если вам когда-нибудь понадобится увидеть конкретное место, в которое установлен пакет, используйте:
python -m pip list -v
-v
or «verbose» добавит дополнительную информацию о каждом установленном пакете, включая путь, по которому он установлен. Это полезно, чтобы убедиться, что вы правильно поддерживаете виртуальные, пользовательские и системные установленные пакеты.На этом этапе вы можете просто удалить старую папку venv и все содержимое. Я рекомендую использовать для этого графический интерфейс - удаление файлов из командной строки linux часто происходит навсегда, и небольшая опечатка может быть плохой новостью.
источник
pip wheel . -w wheels
а затем просто переустановить пакеты в новой виртуальной среде с помощьюpip install --no-index --find-links /path/to/wheels/ -r requirements.txt
--relocatable
Аргументvirtualenv
появляется , чтобы позволить вам сделать это.источник
virtualenv --relocatable my-python-venv
ПОСЛЕ того, как среда уже существует.--help
:This fixes up scripts and makes all .pth files relative
. Нет, он не собирается делать библиотеки, независимые от платформы. Если вы хотите переместить его на другую платформу, вам нужно будет переустановить его на основе локального Python.НО УВЫ:
Нет, просто нельзя
mv
. Есть обходные пути, но может быть проще переустановить.(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 $
... давит
enter
от разочарования, и следующее работаетЗа исключением того, что это не из-за
my-python-venv
печали.Хотите по-
mv
своемуvirtualenv
и пользуйтесь, иначе без изменений?Короткий ответ:
Ну, не могу .
источник
find bin -type f -exec ex -sc "%s,${FROM},${PWD},g|x" {} \;
предположения, что ваш bin и lib находятся в вашей текущей папке venv. Я использую это как быстрый и грязный способ копирования и перемещения виртуальных env python3 с большим количеством установленных пакетов pip.--relocatable
? Кроме того, Натан, отличный вопрос, но это ужасный ответ. Принятие собственного ответа всегда немного предвзято, если только он хорошо не написан и четко не перечисляет варианты, но определение этого в любом случае будет субъективным.mv
использовать Venv?», А ответ был: «Нет, просто нельзяmv
, есть обходные пути, но, возможно, будет проще переустановить». Если бы это был главный ответ, он бы сэкономил время мне и другим.Да, это должно быть возможно, если вы не сделали ничего, что зависит от текущего каталога virtualenv.
Однако, если у вас есть выбор, лучше всего создать новый virtualenv и вместо этого начать использовать новый virtualenv. Это самый безопасный вариант, который с меньшей вероятностью вызовет проблемы в дальнейшем.
В документации упоминается следующее :
Например, если вы запустили,
setvirtualenvproject
он не сможет переключиться в правильный каталог после запуска,workon ...
поэтому в этом случае вам нужно будет исправить это вручную.В общем, virtualenv - это не более чем каталог с необходимыми файлами интерпретатора Python и пакетами, которые вам нужны.
источник
Используя ответы этого и других потоков на аналогичную тему, я создал сценарий bash, который, расположенный и выполняемый в самом каталоге virtualenv , поможет с вашими перемещениями virtualenv.
После этого
virtualenv --relocatable yourenv
вам нужно будет изменять своюVIRTUAL_ENV
переменную каждый раз, когда вы перемещаете каталог, поэтому, если вы не хотите изменять ее вручную, используйте это.#!/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
Я надеюсь, что это помогает.
источник
ДА, ТЫ МОЖЕШЬ! (В
windows
)Обходной путь прост: просто переместите виртуальную среду куда угодно, а затем отредактируйте
activate.bat
внутриscripts\
:Перейдите в виртуальную среду в нужный каталог
Щелкните правой кнопкой мыши и отредактируйте,
activate.bat
расположенный вvenv_folder\scripts
.Измените
VIRTUAL_ENV
переменную с:в
Сохраните отредактированный командный файл, и все!
ПРИМЕЧАНИЕ: Мое решение должно работать и сохранить
windows users
настройки новых виртуальных сред, я сомневаюсь , что это будет работать в другой операционной системе , так как.bat
отMS-DOS
источник
old_directory
наold_directory
- это опечатка?