Python-стиль & ldquo; virtualenv & rdquo; в линуксе?

Как научный разработчик программного обеспечения, исследующий графические процессоры и, в частности, быстро развивающуюся экосистему ROCm для AMD, а также Vulkan, я часто загружаю и тестирую новые передовые библиотеки, многие из которых сложны и иногда нестабильны. Я не хочу загромождать мою «базовую» систему всеми этими установками, некоторые из которых могут делать то, что вредит другим частям системы. Мне также часто нужно удалить и переустановить. Эта проблема хорошо известна в разработке на Python, где была разработана система «виртуальной среды» (aka virtualenv), позволяющая создавать собственные среды «pip» с различными версиями пакетов и даже версиями Python внутри них. Итак, мой вопрос:

Возможно ли использование virtualenv в стиле Python в Linux и, в частности, в Ubuntu, которое допускает установки apt (или snap, или flatpak, или даже на основе исходного кода), которые запечатаны вне базовой системы?

Как и Python virtualenvs, он должен соответствовать следующим критериям:

a) Все пакеты базовой системы должны быть видны изнутри «virtualenv» .

б) Все, что установлено внутри «virtualenv», не должно быть в состоянии повлиять на что-либо снаружи.

в) Когда я удаляю virtualenv, он должен удалить все следы самого себя и все, что я когда-либо делал внутри него в отношении установки программного обеспечения.

d) Все оборудование должно быть видимым, включая графические процессоры.

e) необязательно: разные версии ядра Linux аналогичны разным версиям python, которые позволяют virtualenv.

Я понимаю, что могут быть проблемы на уровне файлов с пунктом c), потому что если вы создадите файлы и каталоги в virtualenv уровня python, они останутся после этого. Таким образом, установка пакетов на основе исходного кода может быть проблематичной в этом отношении, но я готов проявить гибкость в этом вопросе.

Одна технология, которую я не хочу использовать, это виртуализация. Это не соответствует критерию а) выше и часто не соответствует г). Моя «базовая» система уже довольно сложна с часто используемыми вещами, и я не хочу переустанавливать их каждый раз. Несколько разделов ОС на основе Grub также не соответствуют критерию а).

Может ли докер сделать это? Я никогда не мог понять, как создать своего рода «командную строку bash» в контейнере, чтобы я мог затем начать установку вещей, в которые затем красиво закрываются. Должен ли я проходить рабочий процесс в стиле "docker compose" методом проб и ошибок, чтобы достичь этой цели?

Как насчет KVM, Snap, flatpak или даже более низкого уровня cgroups? Какие-то технологии на уровне файловой системы, например, ZFS или btrfs?

Какие у меня варианты?

2
задан 18 May 2019 в 15:38

2 ответа

Контейнер Docker не удовлетворяет:

  • a) Контейнер Docker имеет свой собственный пузырек файловой системы и не видит другие файлы в системе, если явно не отображается в некоторые файлы / каталог в контейнере (но это должно быть использовано для файлов данных). Образ Docker обычно создается путем установки дополнительного программного обеспечения поверх базового образа, часто известного дистрибутива (CentOS, Debian, Ubuntu ...). Вы обновляете путем воссоздания нового образа, снова запуская Dockerfile. Преимущество состоит в том, что то, что на изображении, является довольно контролируемым и воспроизводимым.
  • e) По своей конструкции контейнер Docker - это просто процесс, подобный остальному, поэтому он использует ядро ​​хоста.
0
ответ дан 18 May 2019 в 15:38

Чтобы вести себя еще более как «обычная система Ubuntu» вместо Docker, я думаю, вы могли бы рассмотреть контейнеры LXD .

0
ответ дан 18 May 2019 в 15:38

Другие вопросы по тегам:

Похожие вопросы: