Переименование папки virtualenv, не нарушая ее
Я создал папку и инициализировал экземпляр virtualenv.
$ mkdir myproject
$ cd myproject
$ virtualenv env
Когда я запускаю (env)$ pip freeze
, он показывает установленные пакеты как следует.
Теперь я хочу переименовать myproject/
в project/
.
$ mv myproject/ project/
Однако теперь, когда я запускаю
$ . env/bin/activate
(env)$ pip freeze
он говорит, что пип не установлен. Как переименовать папку проекта, не нарушая среды?
Ответы
Ответ 1
Вам нужно настроить свою установку для использования относительных путей. virtualenv
предоставляет для этого параметр --relocatable
. Из документы:
Обычно среды привязаны к конкретный путь. Это означает, что вы не может перемещать окружающую среду или скопируйте его на другой компьютер. Ты можешь исправить среду, чтобы сделать это перемещается с помощью команды:
$virtualenv --relocatable ENV
ПРИМЕЧАНИЕ. ENV - это имя виртуальной среды, и вы должны запускать ее извне каталога ENV.
Это сделает некоторые из файлов созданный setuptools или распространяемый используйте относительные пути и измените все сценарии для использования activate_this.py вместо использования расположение интерпретатора Python для выберите среду.
Примечание: вы должны запустить это после того, как вы установить любые пакеты в Окружающая среда. Если вы сделаете среда, перемещаемая, затем установите новый пакет, вы должны запустить virtualenv - снова повторим.
Ответ 2
Я верю, что "знать почему" важнее, чем "знать как". Итак, вот другой подход, чтобы исправить это.
Когда ты бежишь . env/bin/activate
. env/bin/activate
, фактически он выполняет следующие команды (например, с помощью /tmp
):
VIRTUAL_ENV="/tmp/myproject/env"
export VIRTUAL_ENV
Однако вы только что переименовали myproject
в project
, так что команда не выполнилась. Вот почему в нем говорится, что pip is not installed
, потому что вы не установили pip
в глобальной системной среде, а ваш virtualenv pip
получен неправильно.
Если вы хотите исправить это вручную, это способ:
-
С помощью вашего любимого редактора, такого как Vim, измените /tmp/project/env/bin/activate
обычно в строке 42:
VIRTUAL_ENV='/tmp/myproject/env'
=> VIRTUAL_ENV='/tmp/project/env'
-
Измените /tmp/project/env/bin/pip
в строке 1:
#!/tmp/myproject/env/bin/python
=> #!/tmp/project/env/bin/python
После этого активировать виртуальную среду env
снова, и вы увидите ваш pip
вернулся снова.
Ответ 3
ПРИМЕЧАНИЕ: Как @jb. указывает, что это решение применимо только к легко созданному (re) созданному virtualenv
s. Если для установки требуется несколько часов, это решение не рекомендуется
Virtualenvs великолепны, потому что их легко создавать и переключаться; они не позволяют вам блокироваться в одну конфигурацию. Если вы знаете требования к проекту или можете получить их, Создать новый virtualenv
:
-
Создайте файл requirements.txt
(env)$ pip freeze > requirements.txt
- Если вы не можете создать файл
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, чтобы сделать вещи немного проще, так как все виртуальные виртуальные машины хранятся в централизованном месте
$(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
Ответ 4
Я всегда устанавливаю virtualenvwrapper, чтобы помочь. В командной строке оболочки:
pip install virtualenvwrapper
В документах virtualenvwrapper есть способ документирования - cpvirtualenv
Это то что ты делаешь. Убедитесь, что вы находитесь вне среды и обратно в приглашение оболочки. Введите это с требуемыми именами:
cpvirtualenv oldenv newenv
И затем, при необходимости:
rmvirtualenv oldenv
Чтобы перейти к вашему новшеству:
workon newenv
Ответ 5
Вы можете исправить свою проблему, выполнив следующие шаги:
- переименуйте каталог
- повторить это:
$ virtualenv ..\path\renamed_directory
- virtualenv исправит ассоциации каталогов, оставив ваши пакеты на месте
-
$ scripts/activate
-
$ pip freeze
, чтобы проверить, что ваши пакеты находятся на месте.
- Важное предупреждение, если у вас есть какие-либо статические зависимости пути в файлах script в вашем каталоге virtualenv, вам придется вручную их изменить.
Ответ 6
Еще один способ сделать это, который работал у меня много раз без проблем, - virtualenv-clone:
pip install virtualenv-clone
virtualenv-clone old-dir/env new-dir/env
Ответ 7
(внутри папки проекта)
cd bin
sed -i 's/old_dir_name/new_dir_name/g' *
Не забудьте деактивировать и активировать
Ответ 8
virtualenv --relocatable ENV
не является желательным решением. Я предполагаю, что большинство людей хотят переименовать virtualenv без каких-либо долгосрочных побочных эффектов.
Итак, я создал простой инструмент для этого. Страница проекта для virtualenv-mv описывает это немного подробнее, но по существу вы можете использовать virtualenv-mv
только например, вы использовали бы простую реализацию mv
(без каких-либо опций).
Например:
virtualenv-mv myproject project
Обратите внимание, что я только что взломал это. Это может сломаться при необычных обстоятельствах (например, symlinked virtualenvs), поэтому будьте осторожны (создайте резервную копию того, что вы не можете потерять) и сообщите мне, если у вас возникнут какие-либо проблемы.