Cabal无法找到本地来源(但已正确安装)的软件包

问题描述 投票:1回答:1

我最近升级到Cabal 3.2(和GHC 8.10),我遇到了一些主要问题,这些问题使我的某些项目无法再构建...

问题的完整描述

这是最小(非)工作配置,每次都会失败:

  1. 我从干净的Cabal配置开始(删除~/.cabal);原因将在后面的文章中出现。我运行cabal update重新创建.cabal目录并确保Cabal在工作。

  2. 我使用test1创建一个项目(我们称其为cabal init)。这是一个库项目,带有一个公开的模块(通常命名为Test1),该模块导出一些伪函数foo。我先运行cabal build,然后运行cabal install --lib;一切运行顺利,到目前为止一切顺利。

  3. 可以肯定的是,我离开了项目目录并启动了GHCi。我输入:m Test1以加载我先前创建的模块,并且可以使用!我可以输入foo ...并查看我的函数已执行。另外,我列出了~/.cabal/store/ghc-8.10.xxx的内容,并看到test1-xxx目录在其中。

  4. 然后我仍然使用test2创建一个新项目cabal init。这次,我将其配置为可执行文件,并添加test1作为依赖项(使用build-depends字段)。但是这次我运行cabal build时遇到了一些问题:

~/projects/haskell/test2> cabal build
Resolving dependencies...
cabal: Could not resolve dependencies:
[__0] trying: test2-0.1.0.0 (user goal)
[__1] unknown package: test1 (dependency of test2)
[__1] fail (backjumping, conflict set: test1, test2)
After searching the rest of the dependency tree exhaustively, these were the
goals I've had most trouble fulfilling: test2, test1

在我看来似乎找不到软件包test1,但是我可以从GHCi(和GHC)访问它,并且它存在于~/.cabal/store ...

但是不幸的是还有更多。

  1. 我创建了第三个项目test3。这是一个库,除base以外不依赖任何其他内容(因此,特别是取决于test1)。 lib公开了一个模块Test3,并导出了一个函数bar。我运行cabal build,在这里没问题。但是,当我想用​​test3安装cabal install --lib时,会遇到一些错误:
~/projects/haskell/test3> cabal install --lib
Wrote tarball sdist to
/home/<user>/projects/haskell/test3/dist-newstyle/sdist/test3-0.1.0.0.tar.gz
Resolving dependencies...
cabal: Could not resolve dependencies:
[__0] unknown package: test1 (user goal)
[__0] fail (backjumping, conflict set: test1)
After searching the rest of the dependency tree exhaustively, these were the
goals I've had most trouble fulfilling: test1

尽管似乎已正确安装,但似乎找不到test1;可能是这是test2构建失败的遗留物,但是...

  1. 可以肯定的是,我启动了GHCi并输入:m Test3,但是GHCi告诉我它找不到模块Test3(甚至暗示这是一个错字,我的意思是Test1),显示尽管test3的构建成功,但确实没有安装...

  2. 好的,对于整个情况还有一个古怪之处:我再次使用cabal init创建了一个新项目,称为test4,它是一个可执行文件,(再次)除了base以外,都不依赖任何其他内容。我保留了默认的Main.hs(只显示“ Hello,Haskell!”)。我运行cabal build:没问题。然后我运行cabal install,...也没问题吗?我在随机位置运行test4,它会启动可执行文件,并显示“ Hello,Haskell!”。在终端...

  3. 还有最后一件事:我走到某个随机位置,然后运行cabal install xxx --lib,其中xxx是Hackage上可用的库包(例如xml),并且:

~> cabal install xml --lib
Resolving dependencies...
cabal: Could not resolve dependencies:
[__0] unknown package: test1 (user goal)
[__0] fail (backjumping, conflict set: test1)
After searching the rest of the dependency tree exhaustively, these were the
goals I've had most trouble fulfilling: test1

这是为什么我需要定期核对.cabal的原因……现在我似乎处于某种陈旧状态,无法再安装任何库。

技术配置和注意事项

我正在运行Cabal 3.2.0.0和GHC 8.10.0.20200123。我从hvr / ghc PPA安装了它们,并确保计算机上的任何地方都没有其他版本的工具。

仅作说明,我正在运行Ubuntu 18.04.4 LTS(使用XFCE,因此确切地说是XUbuntu)。其他所有内容(好像是最新的)。

最后,关于我用于构建的*.cabal文件,它们几乎是cabal init生成的文件,除了在库的情况下我将executable xxx切换为library,而我只是添加了[ C0]字段,用于公开库的模块(因此exposed-modulesTest1test1Test3)。我还使用test3中的build-depends使项目依赖于test2。除此之外,它们几乎保持不变。

注意事项

我必须承认我是Cabal 3的新手;直到上周为止,我一直在使用Cabal 1(因为我从不费心更新它;是的,我知道这很糟糕)。使用Cabal 1,我没有任何问题,而且我完全能够从本地来源安装软件包并在其他项目中依赖它...

我觉得我做错了;也许我没有使用正确的Cabal命令?我在test1cabal new-build的某处看到了一些内容,但至少在cabal new-installcabal build上,似乎没有做更多的事情。我也想研究沙盒,但自Cabal版本2起,它似乎消失了。

也有可能是Cabal错误,但我在错误跟踪器上没有发现任何可能与我的问题有关的相关问题...

您对此有何看法?我究竟做错了什么?您是否看到任何替代或可能的修复方法?

非常感谢!

haskell cabal cabal-install
1个回答
0
投票

GHC环境文件

© www.soinside.com 2019 - 2024. All rights reserved.