
Я использовал менеджер пакетов cabal для программ Haskell, чтобы установить библиотеки и новые проекты, которые я клонировал из некоторых репозиториев. Чаще всего я сталкиваюсь с проблемами. Большинство проектов делают установку очень простой, но в моем случае это не всегда так — иногда их очень сложно запустить. Некоторые настолько сложны, что я потерял интерес к проекту только из-за того, что не смог его установить.
Поэтому вместо жалоб я хотел бы спросить, что мне следует сделать, чтобы улучшить эту ситуацию. Я хотел бы использовать свою последнюю проблему в качестве примера.
Мне интересно попробоватьПроект Gitit. Это многообещающе выглядящий персональный вики, работающий на различных системах контроля версий.
Итак, вот что я сделал:
- Клон изГитхаб
запустите
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-server отдельно, может, это сработает:
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 в первую очередь?
Что мне делать? Подавать отчеты об ошибках (в какой проект?), устанавливать зависимости вручную или что-то еще? Бонусные баллы за объяснение причин таких проблем.
решение1
Проекты со сложными зависимостями (и те, которые включают веб-сервер, скорее всего, относятся к этому классу) часто лучше всего собирать с помощьюcabal-devвместо cabal. Первый устанавливает все в песочнице и не мешает другим установкам.
Поэтому вам следует сначала установить новую версиюПлатформа Хаскелл, затем форкните репозиторий и, наконец, соберите с помощью cabal-dev. Конечно, вы можете установить gitit, cabal-dev install gitit
если не хотите работать с исходным кодом.
Следует избегать глобальных установок сложных проектов.
решение2
Для тех, кто наткнется на это, я обнаружил две важные вещи, которые делают Кабал НАМНОГО менее неприятной штукой.
Во-первых, песочницы встроены, начиная с cabal-install 1.18 (вам больше не нужен cabal-dev). Вам следует обновиться с помощью cabal install cabal-install
и использовать их для всего! Я создаю ~/.cabal/sandboxes
и помещаю туда одну песочницу для каждой сборки. Затем я связываю готовые двоичные файлы ~/.cabal/bin
с помощью ln
.
Во-вторых, если ваш дистрибутив (например, Debian) не дает /tmp
прав на выполнение, это приведет к возникновению всевозможных, казалось бы, не связанных между собой ошибок. Такие как configure: error: cannot run C compiled programs
. Это легко исправить с помощью alias cabal="TMPDIR=/somewhere/with/permission cabal"
.