使用ghc-pkg列表和cabal列表 - 安装给出不同的列表
我试图加载我的.hs文件,但是当我import Data.Numbers.CReal
时,它给了我错误Failed to load interface for 'Data.Numbers.CReal'
。我拼命地跑了和cabal install numbers
如果我cabal list --installed
显示的数字PKG,但如果我ghc-pkg list
它不会(也如果我ghc-pkg check
它给黑线鳕警告的手)。它与我的非加载文件有关吗?我该如何解决这个问题?使用ghc-pkg列表和cabal列表 - 安装给出不同的列表
Ps。我知道如何导入包,但我不确定我是否正确导入了这个包。
如果我没有正确解释自己,谢谢并对不起。
两种假设映入脑海:
-
cabal
是选择一个不同版本的ghc
其主治工具包比你的壳。您可以通过运行这两个命令来检查这种差异:cabal exec -- ghc --version ghc --version
他们说同样的事情吗?如果是的话,拒绝这个假设。否则,你应该决定是否喜欢外壳的选择或阴谋的选择更好(我建议更喜欢你的外壳的选择)。
如果您更喜欢
cabal
的选择,您可以通过在命令中附加-<version>
来使用特定版本的GHC(和其他GHC工具)例如请尝试ghc-pkg-7.10.3 list
以查看版本7.10.3或ghci-7.10.3
的软件包数据库中运行特定版本的REPL的内容。您可以通过添加符号链接或类似于您的PATH
来使这些更改永久生效。如果你喜欢你的shell的选择更好的,你可以要求
cabal
使用该版本cabal configure -w ghc
;或者如果您担心cabal
和您的外壳将以不同方式解析ghc
,则可以要求提供cabal configure -w ghc-7.10.3
或类似的特定版本。 -
你的shell同意
cabal
关于使用什么版本的GHC,但你在一个cabal沙盒中。cabal list --installed
告诉你沙盒中安装了什么,但ghc-pkg list
告诉你用户包数据库中安装了什么。您可以检查这两个命令之间的差异:cabal exec -- ghc-pkg list numbers ghc-pkg list numbers
(如果你有一个新望阴谋 - 不知道该出现在哪个版本 - 你也可以尝试
cabal hc-pkg list
代替cabal exec -- ghc-pkg list
这很可能是。更向前兼容的方式,所以一个良好的习惯来培养。)如果这些打印同样的事情,拒绝这种假设。否则,您应该决定是否要继续使用沙箱(我建议继续使用沙箱)。
如果要停止使用沙箱,你可以通过
--ignore-sandbox
到cabal
。为了使其成为永久的,请查看cabal.sandbox.config
文件,该文件将包含一个指向实际沙箱的指针(通常为.cabal.sandbox
)。删除配置和沙箱。您也可以通过将ignore-sandbox: True
添加到~/.cabal/config
来全局忽略沙箱,但我强烈建议您不要这样做。如果您想保留沙箱,您需要使用
cabal exec
来满足您的所有GHC工具包需求,以确保选择正确的包数据库。例如,尝试使用cabal exec ghci
来运行REPL,以访问沙箱包数据库。
这些假设并不相互排斥:都可能发生。在这种情况下,我强烈建议选择最终的解决方案(“对所有GHC工具包执行使用cabal exec
”),因为它可以透明地处理这两个问题:标准GHC工具组命令将被重写为指代明确版本化的命令(例如,cabal exec ghc
实际上将执行ghc-7.10.3
),环境将被设置为指向正确的包数据库。
这个问题的答案
您可以通过运行这两个命令检查这种差异:
阴谋EXEC - GHC --version GHC --version
做他们说一样的东西?
是的。我不记得第二个选项,但我已经设法自己解决它。我特别做的是:
- 运行命令“rm -rf .cabal”(不含指令)来删除cabal配置。
- 运行“室射频.cabal沙箱”
- 运行“室射频.ghc”
- 阴谋新建的阴谋(不知道这是否有助于或不)
- 在管理模式(命令)我编辑了cabal配置文件并将Ignore Sandbox更改为True - >这会在未来给我带来什么问题吗?我应该把它改回false吗?请回答
- 不得不删除一个cabal.sandbox.config这是给一些麻烦
- 阴谋小集团安装安装
- 阴谋更新
现在GHC-PKG list命令和小集团列表 - 安装显示我安装的软件包,并且他们工作没有问题。
Ps。我从这个过程中提供了详细的信息,以防将来有人需要它。仍然不确定是什么导致了cabal和ghc没有显示相同的pkgs。
注意:不要意外删除'.cabal/config'。 – sapanoia
我认为这个答案是“核选项”。我强烈建议未来的读者首先尝试更温和的解决方案;例如如果'cabal'选择了不同于你想要的GHC版本,你可以使用'cabal configure'来选择另一个版本(如'cabal configure -w ghc-7.10.3')。我将编辑我的答案,在此解决方案中包含一些评论。手动删除cabal沙箱是可以的(目前'cabal'没有办法以非手动的方式删除它们),但你应该明白为什么沙箱首先存在,并确保你实际上不需要它... –
哦,我误解了;考虑到这里的细节,我强烈怀疑我的另一个提议的假设(“你在一个cabal沙箱中,'cabal list -installed'告诉你在沙箱中安装了什么,但'ghc-pkg list'告诉你什么是安装的在你的用户包数据库中“)是正确的。 'cabal configure'对此无能为力,但在我的回答中,我概括了两个温和的解决方案。 –