Подтвердить что ты не робот

Есть ли способ определить флаги для зависимостей между кабалами?

Недавно я столкнулся с проблемой "cabal hell", которую мне удалось решить, вручную установив transformers-compat с флагом -f transformers3 в моей изолированной песочнице cabal до запуск cabal install для моего проекта.

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

4b9b3361

Ответ 1

Современный способ сделать это - использовать Stack. Измените stack.yaml, чтобы включить

flags:
  transformers-compat:
    transformers3: true

См. также раздел flags.

Ответ 2

[Скопировано из раздела комментариев.]

Похоже, что невозможно указать такую ​​зависимость через поле build-depends в вашем файле .cabal. buildDepends определяется как [Dependency], где data Dependency = Dependency PackageName VersionRange. Однако вы можете использовать cabal install --constraint="transformers-compat +transformers3".

Глядя на файл transformers-compat.cabal, я думаю, что решатель должен иметь возможность определить правильное назначение флага, если вы соответствующим образом ограничиваете свою зависимость от transformers. Например. build-depends: transformers >= 0.3 && < 0.4 должен заставить решателя выбрать transformers-compat +transformers3. Если это не сработает, это может быть ошибкой в ​​решателе.

Кроме того, вызов любой технической проблемы с Cabal "Cabal hell" не очень информативен. Было бы проще помочь вам, если бы вы описали, какое сообщение об ошибке вы получали.

Ответ 3

Я также долгое время пытался найти решение этой проблемы. Я просто нашел его! Вы должны изменить глобальный конфигурационный файл cabal на ~/.cabal/config. Добавьте строку, подобную этой, в начальный раздел файла:

ограничения: hmatrix + openblas

Это позволяет использовать флаг openblas для пакета hmatrix. Он будет автоматически использован в следующий раз, когда пакет будет установлен. Если есть способ установить такой флаг локально для песочницы, я не смог его найти.

Ответ 4

Существует несколько способов ограничить версию для установки.

  • Добавьте нижнюю и верхнюю границы в версии пакета в файле cabal, например Mikhail, пример такого файла здесь

  • Кроме того, вы можете переопределить параметры в файле .cabal с флагом cabal install --constraint="bar-2.1"

Чтобы удалить определенную версию пакета:

  • В песочнице вы можете отменить регистрацию версии с помощью cabal sandbox hc-pkg unregister bar-2.1
  • Глобальная незарегистрированность может быть выполнена с помощью этой команды вне песочницы ghc-pkg unregister bar-2.1