Ошибка установки пакета Haskell Stack

user$: stack install dictionaries

Error: While constructing the build plan, the following exceptions were encountered:

In the dependencies for dictionaries-0.1.0.0:
    binary-0.8.3.0 must match >=0.7.5 && <0.8 (latest applicable is 0.7.6.1)
    time-1.6.0.1 must match >=1.5.0 && <1.6 (latest applicable is 1.5.0.1)

С помощью приведенной выше команды я хочу установить пакет dictionaries глобально.

Каковы мои варианты здесь? Планирую stack unpack dictionaries, а потом модифицировать версии. Но как тогда глобально установить модифицированный «локальный» пакет?

Каковы лучшие практики здесь?

Спасибо


person McBear Holden    schedule 09.02.2017    source источник


Ответы (2)


Самый простой: добавить allow-newer: true в stack.yaml

Это было бы решением в данном случае. Это решает проблему ограничения верхней версии, как у вас. Но, конечно, есть вероятность сбоя сборки.

Возможно, один из вариантов: сменить резолвер на последний ночной.

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

Самый общий: сделать зависимость от модифицированного локального пакета.

Вы можете сделать это, добавив путь к пакету в stack.yaml packages:. Тогда стек будет использовать его вместо моментального снимка.

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

person jeiea    schedule 09.02.2017
comment
Второй вариант не будет работать в конкретном случае ОП, так как словари не находится в стеке. Также стоит отметить, что если пакет был удален из Stackage где-то в прошлом, может иметь смысл переключиться на более старый снимок, который включает его. - person duplode; 10.02.2017
comment
Это полностью имеет смысл. Тогда второй вариант можно заменить на stack solver. - person jeiea; 10.02.2017

С помощью приведенной выше команды я хочу установить пакет dictionaries глобально.

(Предварительное примечание: под «глобально» я предполагаю, что вы имеете в виду глобально для вашего пользователя, а не общесистемную установку.)

словари отсутствуют ни в одном снимке стека. Насколько мне известно, это означает, что вы не можете установить его глобально, что касается библиотек, которые доступны только в том случае, если пакет находится в моментальном снимке. См. Ошибка стека № 2656 — хотя описанная там запланированная функция звучит так, как будто вы пытаетесь делать, есть оговорка:

Должен также предупреждать, когда он не используется с --copy-bins, и если есть цели, у которых нет исполняемых файлов, поскольку оба они указывают на непонимание того, как это работает.

Поэтому я предлагаю установить пакет для каждого проекта, используя поле packages с ключом extra-dep - то есть "наиболее общее" решение в jeiea answer .

person duplode    schedule 09.02.2017