有人解释Haskell软件包管理系统
我就是不明白。这太令人困惑了 我知道有有人解释Haskell软件包管理系统,haskell,cabal-install,ghc-pkg,Haskell,Cabal Install,Ghc Pkg,我就是不明白。这太令人困惑了 我知道有ghc-pkg,还有Cabal和Cabal-install。这些都是不同的东西 我被告知安装haskell平台是个坏主意,最好让ghc和cabal分开安装。我不知道为什么这是个坏主意 我发现有一种方法可以使用cabalsandboxinit在本地文件夹中创建一个沙盒。但我不知道如何在全球范围内管理软件包 在通过brew安装ghc和cabal install之后,我的下一步应该是什么?如果我执行cabal更新,它将创建~/.cabal目录,可能会告诉我通过运行
ghc-pkg
,还有Cabal
和Cabal-install
。这些都是不同的东西
我被告知安装haskell平台是个坏主意,最好让ghc和cabal分开安装。我不知道为什么这是个坏主意
我发现有一种方法可以使用cabalsandboxinit
在本地文件夹中创建一个沙盒。但我不知道如何在全球范围内管理软件包
在通过brew安装ghc和cabal install之后,我的下一步应该是什么?如果我执行cabal更新
,它将创建~/.cabal目录,可能会告诉我通过运行阴谋集团安装阴谋集团安装
。然后我必须删除brew安装的,并将.cabal/bin
添加到$PATH,这样cabal
将指向更新的。那么,这是否意味着现在如果我坐在home dir中运行cabal install ghc mod
,它会在~/.cabal文件夹中安装库?
我的ghc-pkg列表指向/usr/local/ceral/ghc/7.8.3/lib/ghc-7.8.3/package.conf.d
,我不喜欢这样。
ghc-pkg-list——用户
指向~/.ghc/x86\u 64-darwin-7.8.3/package.conf.d
,我也不喜欢这样,但可能没关系。
无论如何,初始化ghc pkg的正确方法是什么?我应该运行ghcpkginit--global |--user
还是什么
你们能告诉我管理全局依赖关系的正确方法是什么吗
package.conf.d
和实际的包放在不同的文件夹中可以吗?~/.ghc
文件夹和~/.cabal
文件夹的角色是什么
- 如何正确卸载软件包
ghc pkg unregister
不会删除包,对吗
假设您安装的软件包与其他软件包的最新版本不兼容。说单子控制。假设您执行了cabal安装foo--constraint'monad control<1.0.0.0'
,这使它能够工作。稍后,通过运行ghc pkg unregister foo
并从.cabal/lib和package.conf.d文件夹中物理删除相关文件(您真的必须手动执行此操作吗?)来删除“foo”。但现在仍然有旧版本的monad控件。有没有办法找到并删除未使用的包
- 如何检查过期的软件包
- 有没有办法将依赖项视为树<代码>ghc包装清单
只提供扁平的包装清单
为什么ghc pkg check
会抛出一堆这样的警告:
Warning: haddock-interfaces: ~/.cabal/share/doc/x86_64-osx-ghc-7.8.3/haddock-api-2.15.0.1/html/haddock-api.haddock doesn't exist or isn't a file
我知道你可以放心地忽略这些警告,但它们到底意味着什么
最后,你们不觉得Haskell的包装系统有点糟糕吗?我知道任何人都不应该在没有真正学习的情况下批评某件事,我很抱歉这么说。我是Haskell的新手,但我觉得Haskell的默认包管理充满了缺点。我想知道是否有更好的选择,我不知道?Haskell已经存在了相当长的一段时间,我听到过关于包管理的讨论,它不应该依赖于具体的包,而应该基于抽象,比如接口。想知道我们是否很快就会有这种包装系统?或者这仅仅是理论上的学术修辞,直到2020年才会显现出来
我绝对建议安装Haskell平台。它可以是一个需要更新的PITA(至少在Mac上是这样),但它附带了电池和许多通常无法获得的软件包(例如,请参阅System.Random
)
ghc pkg
通常用于列出已安装的软件包
cabal
用于分发haskell包裹。实际上,它用于构建可执行文件或安装库。您可以通过创建一个.cabal
文件来创建一个包,该文件将包含构建/安装可执行文件/库的方法
cabal install
是更新cabal
的软件包
沙箱非常重要(它们只提供了最新版本的cabal
。它们基本上类似于python的virtualenv
。一般来说,它们创建了一个虚拟环境,您可以在其中安装所需的所有库,而不会污染全球系统范围的安装。要使用它们,您只需深入到所需项目的根目录即可t构建并调用cabal sandbox init
,然后你就完成了。你可以继续使用cabal安装
,cabal构建
,cabal配置
,cabal测试
,就像你通常做的那样。它会自动检测到它在沙盒内。如果你搞错了什么,你可以删除沙盒box viacabal sandbox delete
你还没有回答我的问题。比如说,我想安装ghc mod以便在Emacs和Sublime文本中使用。它需要全局安装,对吗?或者类似hoogle的东西。你需要创建“全局沙盒”吗对于这些?我不这么认为,对吗?那么管理全局软件包的正确方法是什么?@Agzam删除您迄今为止安装的所有内容。安装Haskell平台。安装您想要的软件包,而不使用沙盒。??利润。不,我不想安装平台。您自己说的-更新它是PITA。写下这个问题我想这有助于我更好地理解这个系统。现在我遇到了一个问题-ghc mod无法安装,似乎问题出在monad日志或monad控件中。我需要尝试用特定的方法安装它constraints@Agzam:除了基本的软件外,您并不想在全球范围内安装其他软件。这是为了降低成本东西坏了会损坏,因为你总是可以清理你的东西