Что такое хороший метод для решения проблем с установкой Cabal?

3212
sp3ctum

Я использовал менеджер пакетов cabal для программ на Haskell для установки библиотек и новых проектов, которые я клонировал из некоторых репозиториев. Чаще я продолжаю сталкиваться с проблемами. В большинстве проектов их установка кажется очень простой, но в моем случае это не всегда так - иногда их очень сложно запустить. Некоторые из них настолько сложны, что я потерял интерес к проекту только из-за невозможности его установки.

Поэтому вместо того, чтобы жаловаться, я хотел бы спросить, что я должен сделать, чтобы улучшить эту ситуацию. Я хотел бы использовать мою последнюю проблему в качестве примера.

Я заинтересован в том, чтобы опробовать проект Gitit . Это многообещающая личная вики, которая работает на различных системах контроля версий.

Итак, вот что я сделал:

  • Клон из Github
  • запустите cabal installв каталоге проекта, как мне сказали на странице установки проекта:

    mika@eka:~/git/gitit$ ls BLUETRIP-LICENSE CHANGES HCAR-gitit.tex LICENSE Network README.markdown RELANN-0.6.1 Setup.lhs TANGOICONS YUI-LICENSE data expireGititCache.hs gitit.cabal gitit.hs plugins mika@eka:~/git/gitit$ cabal install Resolving dependencies... cabal: cannot configure happstack-server-7.0.7. It requires base64-bytestring ==1.0.* For the dependency on base64-bytestring ==1.0.* there are these packages: base64-bytestring-1.0.0.0. However none of them are available. base64-bytestring-1.0.0.0 was excluded because gitit-0.10 requires base64-bytestring ==0.1.* mika@eka:~/git/gitit$  
  • Так что теперь я думаю: хорошо, я установлю happstack-сервер самостоятельно, возможно, это будет работать:

    mika@eka:~/git/gitit$ cabal install happstack-server Resolving dependencies... Warning: happstack-server.cabal: Ignoring unknown section type: test-suite Configuring happstack-server-7.0.7... cabal: At least the following dependencies are missing: blaze-html ==0.5.*, hslogger >=1.0.2, monad-control ==0.3.*, network >=2.2.3, sendfile >=0.7.1 && <0.8, system-filepath >=0.3.1, text >=0.10 && <0.12, threads >=0.5, transformers-base ==0.4.* cabal: Error: some packages failed to install: happstack-server-7.0.7 failed during the configure step. The exception was: ExitFailure 1 
  • Похоже, что отсутствуют некоторые зависимости. Но разве установка этих зависимостей не является главной целью использования cabal?

Что я должен делать? Файл отчетов об ошибках (к какому проекту?), Установить зависимости вручную или что-то еще? Бонусные баллы за объяснение причин таких проблем.

6
Попробуйте установить зависимости одну за другой, чтобы увидеть, какие из них не сработали. Иногда отсутствие внешней (не Haskell) зависимости может привести к сбою установки. jpe 11 лет назад 0
Также проверьте, что говорит файл, указанный в разделе `build-summary` файла` ~ / .cabal / config`. jpe 11 лет назад 0
Вы недавно запускали 'cabal update'? m4573r 11 лет назад 0

2 ответа на вопрос

7
Jeff

For anyone who stumbles upon this, I've discovered two important things that make cabal WAY less of a pain.

First, sandboxes are built in starting with cabal-install 1.18 (you don't need cabal-dev anymore). You should upgrade with cabal install cabal-install, and use them for everything! I create ~/.cabal/sandboxes and put one sandbox for each build in there. Then I link finished binaries into ~/.cabal/bin with ln.

Second, if your distro (Debian, for example) doesn't give /tmp execute permissions it will cause all sorts of seemingly unrelated errors. Things like configure: error: cannot run C compiled programs. It's easy to fix with alias cabal="TMPDIR=/somewhere/with/permission cabal".

TMPDIR = ~ / tmp cabal install ... `спас мне ночь! Спасибо за чаевые. Bruno Kim 9 лет назад 1
5
tkx68

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

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

Вы должны избегать глобальных установок сложных проектов.

Это звучит как очень хорошая практика! Я посмотрю, поможет ли это в этом случае. sp3ctum 11 лет назад 0