Какой структуре каталогов следует придерживаться при использовании virtualenv
? Например, если бы я создавал приложение WSGI и создал виртуальную среду с именем, foobar
я бы начал с такой структуры каталогов, как:
/foobar
/bin
{activate, activate.py, easy_install, python}
/include
{python2.6/...}
/lib
{python2.6/...}
Как только эта среда будет создана, где можно разместить свою собственную:
- файлы python?
- статические файлы (изображения и т. д.)?
- "нестандартные" упаковки, такие как те, что доступны в Интернете, но не продаются в сырном магазине?
по отношению к virtualenv
каталогам?
(Предположим, я уже знаю, куда должны идти сами каталоги virtualenv .)
python
project
virtualenv
Филлип Б. Олдхэм
источник
источник
Ответы:
virtualenv
предоставляет экземпляр интерпретатора Python, а не экземпляр приложения. Обычно вы не создаете файлы своего приложения в каталогах, содержащих системный Python по умолчанию, также нет необходимости размещать свое приложение в каталоге virtualenv.Например, у вас может быть проект, в котором несколько приложений используют один и тот же файл virtualenv. Или вы можете тестировать приложение с помощью virtualenv, которое позже будет развернуто с системным Python. Или вы можете упаковывать автономное приложение, в котором может иметь смысл разместить каталог virtualenv где-то внутри самого каталога приложения.
Так что в целом я не думаю, что есть один правильный ответ на этот вопрос. И что хорошо, так
virtualenv
это то, что он поддерживает множество различных сценариев использования: не обязательно должен быть один правильный путь.источник
virtualenvwrapper
), когда я хочу , чтобы редактироватьpostactivate
иpostdeactivate
крючки.virtualenv
каталога, но сравнениеvirtualenv
с системным python бесполезно, потому что цельvirtualenv
состоит в том, чтобы исправить сломанные зависимости и изолировать проекты, чтобы они могли использовать разные версии пакетов и даже версии python (я понимаю, что это было написано заранее -python3). Разрешение приложениям делиться avirtualenv
используется так,virtualenv
как если бы это был системный Python, оставляя приложения уязвимыми для тех же проблем, для решения которых предназначен virtualenv.There should be one obvious way to do it
; по логике должно быть 1: 1Если время от времени у вас всего несколько проектов, ничто не мешает вам создать новый virtualenv для каждого и разместить свои пакеты прямо внутри:
Преимущество этого подхода в том, что вы всегда можете быть уверены, что найдете внутри проекта скрипт активации.
Если вы решили быть немного более организованным, вам следует подумать о том, чтобы поместить все свои виртуальные файлы в одну папку и назвать каждую из них в честь проекта, над которым вы работаете.
Таким образом, вы всегда можете начать с новой виртуальной машины, когда что-то пойдет не так, и ваши файлы проекта останутся в безопасности.
Еще одно преимущество заключается в том, что несколько ваших проектов могут использовать один и тот же файл virtualenv, поэтому вам не нужно выполнять одну и ту же установку снова и снова, если у вас много зависимостей.
Для пользователей, которым регулярно приходится устанавливать и удалять virtualenvs, имеет смысл взглянуть на virtualenvwrapper.
С помощью virtualenvwrapper вы можете
Вам больше не нужно беспокоиться о том, где находятся ваши виртуальные объекты при работе над проектами "foo" и "bar":
Вот как вы начинаете работу над проектом "foo":
Затем переключиться на «панель» проекта очень просто:
Довольно здорово, не правда ли?
источник
virtualenvwrapper
. Он аккуратно абстрагирует виртуальные возможности, сохраняя при этом все преимущества.venv/
каталог на тот же уровень, что и проектBASE_DIR
.Поскольку файлы virtualenv не могут быть перемещены, на мой взгляд, размещение файлов проекта в каталоге virtualenv - плохая практика. Сам virtualenv - это сгенерированный артефакт разработки / развертывания (вроде как файл .pyc), а не часть проекта; должно быть легко удалить его и воссоздать в любое время или создать новый на новом хосте развертывания и т. д.
На самом деле многие люди используют virtualenvwrapper , который практически полностью удаляет фактические virtualenvs из вашего поля зрения, по умолчанию помещая их все рядом в $ HOME / .virtualenvs.
источник
virtualenv --relocatable myvenv
увидеть stackoverflow.com/a/6628642/1335793 только потому , что вы можете не означает , что вы должны хотя.Если вы дадите своему проекту a
setup.py
, pip может напрямую импортировать его из системы контроля версий.Сделайте что-нибудь вроде этого:
Он
-e
поместит проектmyproject/src
, но свяжет егоmyproject/lib/pythonX.X/site-packages/
, поэтому любые внесенные вами изменения будут немедленно приняты в модулях, которые импортируют его из вашего локальногоsite-packages
.#egg
Немного говорит Пип , что имя , которое вы хотите дать пакет яиц он создает для вас.Если вы не используете
--no-site-packages
, будьте осторожны, чтобы указать, что вы хотите установить pip в virtualenv с-E
опциейисточник