Переименование папки виртуальное окружение, не нарушая его
Я создал папку и инициализировал экземпляр virtualenv в ней.
$ mkdir myproject
$ cd myproject
$ virtualenv env
когда я запускаю (env)$ pip freeze, он показывает установленные пакеты, как это должно быть.
теперь я хочу переименовать myproject/ до project/.
$ mv myproject/ project/
однако теперь, когда я бегу
$ . env/bin/activate
(env)$ pip freeze
он говорит, что pip не установлен. Как переименовать папку проекта, не нарушая экологию?
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правильно поступает.если вы хотите, чтобы исправить это вручную, вот так:
изменить
/tmp/project/env/bin/activateС вашим любимым редактором, как Vim, обычно вLine 42
VIRTUAL_ENV='/tmp/myproject/env'=>VIRTUAL_ENV='/tmp/project/env'изменить
/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.txtfile
(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
вы можете исправить вашу проблему, выполнив следующие действия:
- переименовать свой каталог
- повтор этого:
$ virtualenv ..\path\renamed_directory- virtualenv исправит ассоциации каталогов, оставив ваши пакеты на месте
$ scripts/activate$ pip freezeчтобы убедиться, что ваши пакеты находятся на месте- важное предостережение, если у вас есть какие-либо статические зависимости пути в файлах скриптов в вашем каталоге 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