Где следует создавать виртуальные виртуальные машины?

107

Я не понимаю, где мне разместить свои virtualenv.

В моем первом проекте django я создал проект с помощью команды

django-admin.py startproject djangoproject

Затем я перешел в каталог djangoproject и запустил команду

virtualenv env

который создал каталог виртуальной среды на том же уровне, что и внутренний djangoprojectкаталог.

Это неправильное место для создания virtualenv для этого конкретного проекта?

У меня сложилось впечатление, что большинство людей хранят все свои virtualenv вместе в совершенно другом каталоге, например ~/virtualenvs, а затем используют virtualenvwrapper для переключения между ними.

Есть ли правильный способ сделать это?

Луч
источник

Ответы:

128

Многие люди используют инструмент virtualenvwrapper , который хранит все виртуальные файлы в одном месте ( ~/.virtualenvsкаталоге) и позволяет использовать ярлыки для их создания и хранения. Например, вы можете сделать:

mkvirtualenv djangoproject

а потом позже:

workon djangoproject

Вероятно, хранить каталог virtualenv в самом проекте - плохая идея, поскольку вы не хотите его распространять (он может быть специфическим для вашего компьютера или операционной системы). Вместо этого сохраните файл requirements.txt с помощью pip :

pip freeze > requirements.txt

и распространять это. Это позволит другим пользователям, использующим ваш проект, переустановить все те же требования в свой виртуальный сервер с помощью:

pip install -r requirements.txt
Дэвид Робинсон
источник
хорошо, что я никогда не заглядывал в пипсы, но если мне когда-нибудь понадобится, это пригодится
Джоран Бизли
pip очень популярен в сообществе Django и очень прост в использовании.
Дэвид Робинсон
Спасибо, Дэвид, я так и думал. Я знал о требованиях и делаю это. Я просто не был уверен, куда должен пойти венв. Ваш комментарий о том, что это зависит от ОС, является хорошим оправданием того, что вы предлагаете.
Ray
Можно ли переместить виртуальную среду после ее создания? Я невольно поместил его в каталог своего проекта
Джеймс Вежба
6
Не очень хорошее оправдание ИМО. Разве не для этого нужен .gitignore?
Джош Ной
24

Изменение расположения каталога virtualenv нарушает его

Это одно из преимуществ размещения каталога за пределами дерева репозитория, например, в разделе ~/.virtualenvswith virutalenvwrapper.

В противном случае, если вы сохраните его в дереве проекта, перемещение местоположения проекта нарушит работу virtualenv.

См .: Переименование папки virtualenv без ее нарушения

Есть, --relocatableно известно, что он не идеален.

Еще одно небольшое преимущество: вам это не нужно .gitignore.

Преимущества размещения gitignored в самом дереве проекта:

  • хранит связанные вещи вместе.
  • вы, вероятно, никогда не будете повторно использовать данный virtualenv в разных проектах, поэтому размещение его в другом месте не дает большого преимущества
Чиро Сантилли 郝海东 冠状 病 六四 事件 法轮功
источник
3
Это единственный разумный аргумент, который я видел для создания папок virtualenv вне деревьев проектов! Другое руководство, кажется, просто повторяет догму о «централизации», как если бы это была лучшая практика, а не неудачный компромисс из-за того, что virtualenvs в корне нарушены (хотя и весьма полезны!).
rob3c
Извините, что-то мне непонятно, поэтому вы рекомендуете создать его в дереве проекта, а затем "gitignoring" или создать его в ~ / .virtualenvs? Что означает «Если бы не это»?
aderchox
1
@aderchox есть компромисс: поместите его в дерево проекта, и оно будет перемещаться по дереву, которое вы должны переустановить, или поместите его ~, но управляйте дополнительным подкаталогом вне проекта.
Чиро Сантилли 郝海东 冠状 病 六四 事件 法轮功
5

Общепринятое место для их размещения - то же самое, что и установка virtualenvwrapper по умолчанию: ~/.virtualenvs

По теме: virtualenvwrapper - отличный инструмент, который предоставляет сокращения для общих команд virtualenv. http://www.doughellmann.com/projects/virtualenvwrapper/

Эммет Батлер
источник
0

Если вы используете pyenv install Python, тогда pyenv-virtualenv будет лучшей практикой. Если установлен .python-versionфайл, он может автоматически активировать или деактивировать виртуальную среду при смене рабочей папки. Pyenv-virtualenvтакже поместите все виртуальные env в $HOME/.pyenv/versionsпапку.

Астон
источник
0

Исходя из моего личного опыта, я бы рекомендовал организовать все виртуальные среды в одном каталоге. Если только у кого-то не очень четкая память и он не может запоминать файлы / папки, разбросанные по файловой системе. Не большой поклонник использования других инструментов только для управления виртуальными средами. В VSCode, если я настраиваю ( python.venvPath) каталог, содержащий все виртуальные среды, он может автоматически распознать их все.

Теджас Сараде
источник