Cabal-install и Debian
Итак, это немного личная проблема, но, возможно, у людей будут хорошие советы или обходные пути.
Проблема заключается в установке cabal-install и haskell-платформы под Debian.
Когда вы apt-get install haskell-platform
, он поставляется с cabal-install
, и доступна его команда cabal
.
Теперь этот cabal-install
не обновляется:
> which cabal
/usr/bin/cabal
> /usr/bin/cabal --version
cabal-install version 0.8.0
using version 1.8.0.2 of the Cabal library
Но мое понимание работы cabal update
заключается в том, что он обновляет cabal, но поскольку он не является "Debian thingy", он помещает его в ~/.cabal/bin/
.
> ~/.cabal/bin/cabal --version
cabal-install version 0.8.2
using version 1.8.0.2 of the Cabal library
Теперь моя система состоит из двух кабалов, и тот, который я получаю, набрав cabal
, не тот, который я хочу использовать... Потому что он будет продолжать обновлять другой, а не сам по себе, и поэтому неэффективен.
Итак, что я сделал, я использовал его в моем ~/.bashrc
:
alias cabal='~/.cabal/bin/cabal'
Сейчас:
> cabal --version
cabal-install version 0.8.2
using version 1.8.0.2 of the Cabal library
Итак, мои последние вопросы:
- Есть ли репозиторий deb, который содержит cabal 0.8.2?
- Может ли мое текущее решение привести к проблемам? (Например,
which cabal
по-прежнему указывает на мой бесполезный /usr/bin/cabal
, поэтому, если скрипты используют эту команду, они обманут...)
- Кто-нибудь придумал лучшее решение? (Шахта немного адская, но все, что я мог придумать, с моим плохим знанием того, что происходит за кулисами...)
- Пожалуйста, поправьте меня, если что-то, что я говорю выше, неправильно или неточно.
Ответы
Ответ 1
Я занимаюсь установкой cabal с флагом --global
. Это установит cabal в /usr/local/bin/cabal
, таким образом, он всегда будет заменять пакетные пакеты Debian.
Другой способ - это вообще отказаться от пакетов Debian и установить платформу Haskell прямо из своего источника. Этот подход также лучше, если вы всегда хотите иметь последние версии библиотек Haskell.
Ответ 2
Я сохраняю свой пользовательский локальный $HOME/.cabal/bin
в начале PATH
.
Я устанавливаю только пакеты ghc6
, ghc6-prof
, ghc6-doc
и cabal-install
из пакетов распространения. Я не использую дистрибутив cabal-install
для чего-то большего, чем для загрузки нового ~/.cabal
.
Все остальное я устанавливаю с помощью cabal install
, включая более новый cabal
.
Когда я хочу использовать новый GHC, я разворачиваю его в /usr/local/stow/ghcVERSION
и включаю его с помощью GNU stow
(он добавляет символические ссылки в /usr/local
, который, опять же, имеет приоритет в моем PATH
). Когда я хочу вернуться к дистрибутиву GHC, я просто запустил stow -D
, чтобы удалить все символические ссылки на него.
Я рассматриваю использование cabal-dev
, чтобы иметь специфичные для проекта установки каббала, и время от времени избегайте ломающихся зависимостей, которые происходят с cabal
.
На самом деле я вообще не использую платформу Haskell, потому что мне не нужно все это и проще установить отдельные библиотеки. Я не устанавливаю библиотеки дистрибутивов, потому что не все из них доступны или являются именно теми версиями, которые мне нужны; и гораздо легче контролировать конфликты, если все они установлены в одном месте (~/.cabal
в моем случае). Я ничего не устанавливаю с помощью --global
, потому что считаю, что это неправильно и трудно откат.
Ответ 3
Конечно, эта информация устаревает, но да, нестабильная и тестируемая Debian на момент написания этой статьи была установлена с помощью cabal-install 0.10.2.
Как правило, пакет Debian для Haskell предназначен для пользователей, которые хотят, чтобы набор пакетов, которые, как известно, работают вместе, т.е. не зависимо от ада, за счет не всегда самого последнего и самого большого. Это включает в себя инсталляцию cabal. Я использую cabal-install из репозиториев и только для установки тех библиотек, которые еще не были упакованы для Debian.
Отказ от ответственности: я один из парней, которые создают эти пакеты для Debian.
Ответ 4
В Ubuntu я также пытаюсь установить GHC через stow, полностью игнорируя системные пакеты.
Один небольшой поворот от подхода jetxee заключается в том, что я устанавливаю платформу Haskell (из источника), вставляя ее в каталог каталога GHC. Я полагаю, что я должен был бы называть пути /usr/local/stow/haskell-platform-VERSION
, но вместо этого я использую /usr/local/stow/ghc-VERSION
.