Haskell Cabal: как игнорировать зависимости

#haskell #dependencies #cabal

#haskell #зависимости #cabal

Вопрос:

Я пытаюсь установить пакет (nymphaea, как это происходит). Это зависит от более ранней версии base, чем та, что у меня есть. Я не стремлюсь понижать рейтинг своих базовых библиотек, поэтому я хотел бы попытаться просто игнорировать эту зависимость и посмотреть, как пойдут дела.

Есть ли способ сообщить cabal, чтобы он пропустил определенную зависимость?

Обновление: Что мне делать с файлом cabal после редактирования? У Cabal нет очевидного способа указать его на файл, и нигде я не могу вручную поместить файлы cabal, насколько я могу судить.

[Как показано ниже, по-видимому, я должен просто вызвать cabal install в каталоге, содержащем отредактированный файл cabal ]

Обновление 2: К сожалению, cabal выдает мне странную ошибку о том, что требуются версии пакетов, которые, похоже, у меня есть:

 $ cabal install -v --upgrade-dependencies time
Reading available packages...
Resolving dependencies...
In order, the following would be installed:
time-1.2.0.5 (new version)
Extracting
C:UsersMarcinAppDataRoamingcabalpackageshackage.haskell.orgtime1.2.0.5time-1.2.0.5.tar.gz
to C:UsersMarcintime-1.2.0.54736...
Creating C:UsersMarcintime-1.2.0.54736time-1.2.0.5distsetup (and its
parents)
C:Program Files (x86)Haskell Platform2011.2.0.1binghc.exe --make C:UsersMarcintime-1.2.0.54736time-1.2.0.5Setu
p.hs -o C:UsersMarcintime-1.2.0.54736time-1.2.0.5distsetupsetup.exe -odir C:UsersMarcintime-1.2.0.54736time-1
.2.0.5distsetup -hidir C:UsersMarcintime-1.2.0.54736time-1.2.0.5distsetup -i -iC:UsersMarcintime-1.2.0.54736
time-1.2.0.5 -package Cabal-1.10.1.0
<command line>: cannot satisfy -package Cabal-1.10.1.0:
    Cabal-1.10.1.0-55f781465ee9f32289755ad706c71f0f is unusable due to missing or recursive dependencies:
      directory-1.1.0.0-3a2367d72569467a8af8a231656ff1b8 process-1.0.1.5-b3dded8e54a2e13d22af410bdcfafff4
    (use -v for more information)
World file is already up to date.
cabal.exe: Error: some packages failed to install:
time-1.2.0.5 failed during the configure step. The exception was:
ExitFailure 1
  

Ответ №1:

Чтобы следить за комментариями к ответу Дона:

Сначала возьмите пакет из Hackage.

 $ cabal unpack nymphaea
  

Затем отредактируйте файл .cabal и измените base <= 4.1.0.0 на base > 3 amp;amp; < 5 .

 $ cd nymphaea-0.3
$ vim nymphaea.cabal
  

Теперь попробуйте установить его.

 $ cabal install
  

Я заставил это работать с этим изменением, используя платформу Haskell 2011.2.0.1 на Ubuntu Natty после установки необходимых пакетов Debian.

Комментарии:

1. Спасибо — однако для меня это все еще не работает из-за другой загадочной ошибки (по-видимому, time не будет собираться, потому что это зависит от пакетов, которые, похоже, у меня уже есть ?!?)

2. @Marcin: Трудно сказать, не видя сообщения об ошибке, но в большинстве случаев такие ошибки вызваны отсутствием пакетов, отличных от Haskell, или тем, что компилятор не может их найти. Мне пришлось установить libglade2-dev , но также могут быть другие зависимости, которые я уже установил.

3. @Marcin: Я помню, что раньше у меня была похожая проблема с time пакетом после его случайного обновления. В итоге я просто переустановил платформу Haskell.

Ответ №2:

Вы должны отредактировать файл .cabal, связанный с пакетом, и удалить все ограничения на базе, которые вы видите. Изменить, например,

 base < 3
  

Для

 base >= 3 amp;amp; < 5
  

И посмотреть, компилируется ли это. Если это сработает, вы можете изменить версию и сообщить об этом сопровождающему. Если они не отвечают, вы можете загрузить исправленную версию, чтобы взломать самостоятельно.

Комментарии:

1. Это фактическая строка из nymphaea.cabal: build-depends: base<=4.1.0.0, random, containers, mtl, parsec, glib, gtk>=0.10.0, glade, cairo

2. Да, это просто неправильно, поскольку это зависит от незначительных оборотов. Попробуйте base > 3 amp;amp; < 5

3. Что не так? Это копия-вставка из фактического файла, включенного при его загрузке.

4. О, подождите, вы хотите сказать, что такого рода база неверна, если зависит от незначительных изменений? Это имеет смысл.

5. Хорошо, спасибо, но еще один вопрос — где находятся файлы cabal / что мне сделать с cabal, чтобы заставить его обратить внимание на мой новый файл?