Почему инициализация песочницы Cabal не меняет PATH, как это делает virtualenv?

Здесь новичок в Haskell и парень в Python.

Я думаю, что могу что-то упустить, но если вы посмотрите на быстрый запуск Yesod, автор установит некоторые пакеты до< /сильный> cabal sandbox init. Я видел ту же картину в другом месте. Вопросы:

  1. Я что-то пропустил? Это реальный способ использовать песочницу клики?
  2. Почему я не могу (или не должен) устанавливать yesod-bin внутри песочницы?
  3. Что, если я использую разные версии yesod-bin в некоторых проектах?
  4. Если есть некоторые библиотеки, которые устанавливают двоичные файлы внутри .cabal-sandbox/bin, почему cabal sandbox init не изменить PATH, чтобы соответствовать версии в песочнице?

Заранее большое спасибо!


person Herberth Amaral    schedule 25.01.2015    source источник


Ответы (2)


  1. Да, это как использовать песочницу.

    cabal sandbox init создаст для вас несколько файлов/каталогов, которые будут отслеживать установленные вами пакеты.

    cabal install some_package установит этот пакет в песочницу.

  2. Вы можете установить yesod-bin в песочницу.

  3. Читать пункт 2

  4. cabal sandbox init не меняет ваш путь, потому что в этом нет необходимости. Просто добавьте PATH=.cabal-sandbox/bin:$PATH в свой .bash_profile.

    В отличие от virtual-env, вам никогда не нужно «включать» или «отключать» песочницу. Вы просто cd заходите в каталог, и он включается автоматически.

    Единственный реальный недостаток, который я обнаружил в песочницах клики, заключается в том, что вам нужно находиться в корневом каталоге, чтобы действовать в песочнице. Это означает, что если вы находитесь в подкаталоге, запуск cabal install some_package не установит его в песочницу на уровень выше, вместо этого он установит его либо в глобальную, либо в пользовательскую базу данных, в зависимости от того, как вы настроили cabal.

person Justin Wood    schedule 25.01.2015
comment
Лучше, чем я думал. Спасибо! - person Herberth Amaral; 26.01.2015
comment
Если вы не находитесь в корневом каталоге изолированной программной среды Cabal, вы все равно можете работать в этой изолированной программной среде, указав Cabal правильный файл конфигурации: cabal --config=<path>\cabal.sandbox.config <command>. - person user2407038; 26.01.2015

cabal exec позволяет выполнять программу в контексте песочницы. Он изменяет путь, чтобы включить папку bin песочницы. Вы можете увидеть это, выполнив cabal exec printenv внутри песочницы.

Кроме того, последние версии cabal позволяют создавать песочницы в папках без .cabal файлов. Как только вы запустите cabal sandbox init, вы можете просто cabal install установить нужные вам зависимости.

Таким образом, чтобы использовать разные версии yesod-bin, установите их в разных песочницах, а затем вызовите cabal exec yesod-bin на каждой из них.

(Дополнительный совет: cabal exec gchi — полезная команда, которая сообщает ghci о содержимом песочницы.)

person danidiaz    schedule 25.01.2015