6

Я использовал менеджер пакетов 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?

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

2 ответа2

7

Для тех, кто наткнулся на это, я обнаружил две важные вещи, которые делают клику ПУТЬ меньше боли.

Во-первых, песочницы встроены начиная с 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" .

5

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .