Кабал-Инсталлы и ДеБиан
-
28-10-2019 - |
Вопрос
Итак, это немного личная проблема, но, возможно, у людей будут хорошие советы или обходные пути.
Проблема заключается в установке Cabal-Install и Haskell-Platform при 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
Теперь у моей системы есть 2 кабины, и я получаю, набравшись 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
, так что, если сценарии используют эту команду, они будут одурачены ...) - Кто -то придумал лучшее решение? (Моя немного специально, но это все, что я мог бы прийти к своим плохом знании о том, что происходит за кулисами ...)
- Пожалуйста, поправьте меня, если что -нибудь, что я говорю выше, неправильно или неточно.
Решение
Что я делаю, так это установка CABAL с --global
флаг. Это установит CABAL в /usr/local/bin/cabal
, Таким образом, это всегда будет засорять кабину Debian Packages.
Другим способом, как правило, избегать пакетов Debian и устанавливать платформу Haskell прямо из своего источника. Этот подход также лучше, если вы всегда хотите иметь последние выпуски Haskell Libs.
Другие советы
Я держу свой пользователь-локальный $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
, потому что я думаю, что это неправильно и сложно отказаться.
Конечно, эта информация становится устаревшей, но да, Debian Нестабильно и тестирование имеют на момент написания, Cabal-Install 0.10.2.
Как правило, упаковка Debian из Haskell Stuff предназначена для пользователей, которым хотят набор пакетов, которые, как известно, работают вместе, то есть без зависимости, ада, за счет не всегда иметь последних и лучших. Это включает в себя установку CABAL. Я использую Cabal-Install из репозиториев и только для установки тех библиотек, которые еще не были упакованы для Debian.
Отказ от ответственности: я один из парней, которые создают эти пакеты для Debian.
На Ubuntu я также склонен устанавливать GHC через Stow, вообще игнорируя пакеты систем.
Один небольшой поворот от подхода Jetxee заключается в том, что я устанавливаю платформу Haskell (из источника), объединяя ее с помощью каталога GHC Stow. Я полагаю, я должен назвать пути /usr/local/stow/haskell-platform-VERSION
, но я склонен использовать /usr/local/stow/ghc-VERSION
вместо.