我最近遇到了一个Cabal问题,我只是通过在我的cabal沙箱中手动安装transformers-compat
-f transformers3
标记来解决这个问题,然后为我的项目运行cabal install
。
有没有办法在我的应用程序的.cabal
文件中指明我依赖于库,以便使用特定的构建标志构建它?
答案 0 :(得分:15)
看起来无法通过build-depends
文件中的.cabal
字段指定此类依赖关系。 buildDepends
is defined as [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
。如果这不起作用,则可能是解算器中的错误。
答案 1 :(得分:9)
我也很努力找到解决这个问题的方法。我刚发现一个!您必须在~/.cabal/config
修改全局cabal配置文件。像这样添加constraints行到文件的初始部分:
约束:hmatrix + openblas
这会为openblas
包启用hmatrix
标记。它将在下次安装软件包时自动使用。如果有办法在沙盒中本地设置这样的标志,我找不到它。
答案 2 :(得分:8)
答案 3 :(得分:7)
较新版本的Cabal允许您在cabal.project.local
或cabal.project
文件中指定constraints。例如:
constraints: hmatrix +openblas
有没有办法在我的应用程序的.cabal文件中指出我依赖于库,以便使用特定的构建标志构建它?
不,但在你的情况下,这实际上并不是解算器中的一个问题,而是一个相当无意义的错误(由某人不太明智地使用标志引起)。
答案 4 :(得分:-2)
有几种方法可以限制安装版本。
在cabal文件中添加包版本的下限和上限,如上面提到的Mikhail,example of such a file here
此外,您可以使用标记cabal install --constraint="bar-2.1"
删除特定版本的软件包:
cabal sandbox hc-pkg unregister bar-2.1
ghc-pkg unregister bar-2.1