Зачем использовать Python «virtualenv» в Linux, если у вас есть «chroot» (и файловые системы union/overlay)?

Прежде всего позвольте мне заявить, что я сторонник универсального программного обеспечения (вообще ;-). Я не эксперт по Python, но мне кажется, что утилита virtualenv решает почти ту же проблему, которую может решить chroot — загружает дерево каталогов, которое можно передать как root, тем самым эффективно защищая реальное дерево каталогов, если нужный.

Поскольку я не являюсь экспертом в Python, как уже упоминалось, мне интересно, какую проблему может решить virtualenv, которую не может решить chroot? Я имею в виду, не могу ли я просто создать красивое фальшивое корневое дерево (возможно, используя монтирование объединения), chroot в него и pip install сделать пакет, который я хочу, в моей новой среде, а затем поиграть в пределах моей новой среды, запуск скриптов python, а что нет?

Я что-то упустил здесь?

Обновлять:

Нельзя ли установить пакеты/модули локально в любой каталог приложения, я имею в виду, без привилегий root и впоследствии без перезаписи или добавления файлов в /usr/lib или /usr/local/lib? Похоже, что это то, что делает virtualenv, однако я думаю, что он должен символически ссылаться или иным образом предоставлять интерпретатор Python для каждой создаваемой среды, не так ли?


person amn    schedule 15.11.2013    source источник
comment
С chroot вы должны обернуть все свои файлы и данные, что вам не нужно делать с virtualenv. Кроме того, virtualenv будет работать в Windows.   -  person Dale Myers    schedule 15.11.2013


Ответы (1)


загрузка дерева каталогов, которое может быть передано как root

Это не то, что делает virtualenv, за исключением (в некоторой степени) пакетов Python. Он предоставляет место, где они могут быть установлены без замены остальной части файловой системы. Он также работает без привилегий root и является переносимым, поскольку не требует поддержки ядра, в отличие от chroot, который (я полагаю) не будет работать в Windows.

Нельзя установить пакеты/модули локально в любом каталоге приложения

Да, но virtualenv делает еще одну вещь: он отключает (по крайней мере, по умолчанию) системные каталоги пакетов Python. Это означает, что вы можете проверить, правильно ли ваш пакет устанавливает все свои зависимости (вы, возможно, забыли указать одну из них, потому что она уже установлена ​​в вашей системе), и позволяет ли она устанавливать разные версии, если вам нужны более новые или более старые версии. Не следует упускать из виду возможность установки более старых версий, потому что иногда новые версии пакетов содержат ошибки.

person Fred Foo    schedule 15.11.2013
comment
Спасибо. Что ж, без поддержки ядра python вообще не будет работать в Linux, поэтому я думаю, что поддержка ядра необходима и не имеет значения, по крайней мере, для меня. То же самое относится и к Windows - меня это не волнует в этом контексте, и поэтому для меня не имеет значения, поддерживает ли она chroot или нет (я знаю, что это не так). Я не выступаю за использование chroot вместо virtualenv, ни перед кем другим, просто спрашиваю, могу ли я добиться желаемого результата, используя первый вместо второго? - person amn; 15.11.2013
comment
@amn: я имею в виду поддержку ядра для chroot, конечно, - это системный вызов. Но да, вы можете заменить virtualenv на chroot, это будет намного больше работы и (для большинства случаев использования) излишним. - person Fred Foo; 15.11.2013