2015-01-25 1 views
9

Haskell новичок и парень Python здесь.Почему cabal sandbox init не меняет PATH, как virtualenv делает?

Я думаю, что может быть что-то пропустил, но если вы посмотрите на Yesod's quickstart, то Автор установить некоторые пакеты перед темcabal sandbox init. Я видел ту же картину в другом месте. Вопросы:

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

спасибо, что заблаговременно!

ответ

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

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

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

  2. Более подробную информацию о размещении можно на странице: yesod-bin.

  3. Читайте пункт 2

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

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

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

+0

Лучше, чем я думал. Спасибо! –

+1

Если вы не находитесь в корневой папке песочницы cabal, вы все равно можете работать в этой песочнице, указав cabal в правильный файл конфигурации: 'cabal --config = \ cabal.sandbox.config '. – user2407038

6

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

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

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

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