Haskell cabal:我刚刚安装了软件包,但现在找不到软件包了

jam*_*her 20 haskell cabal

在这里我唯一的原因是我cabal发现GHC没有找到我正在安装的软件包:

全局安装软件包时会发生这种情况,并且以前的软件包是在本地安装的.请注意,cabal-install默认安装在本地[...]

据推测,"本地安装"意味着将包装放入~/.cabal/.第一个问题:全球安装在哪里?

我一直在cabal使用sudo,所以我猜这是一个全局安装?我之所以这样做是因为它在没有运行时会抱怨权限sudo,所以这与"默认情况下cabal-install install"这句话相矛盾.第二个问题:如何在本地安装以及如何全局安装?

试图修复这个烂摊子,我一直在随机使用sudo ghc-pkg unregister并随机删除~/.cabal/.因此,我的包树可能已破坏,可能是本地和全局的.第三个问题:我该如何重新开始?


编辑:我正在运行Ubuntu 10.10.我安装了Haskell Platform 2011.

app*_*ive 7

您使用的是Windows,OS X还是某些版本的Linux?你在使用Haskell平台吗?你有ghccabal之前的版本?对于Linux发行版,当然可能会有关于包管理器的细微之处.(ghc特别是旧的痕迹,旧的〜/ .ghc /目录可能是麻烦的来源.)

以下是关于#haskell遇到此类问题的类型的一些基本想法.(当然,我的理解力还不够):

主要问题似乎是,为什么你被邀请做本地安装应该做什么sudocabal install pony --global如果ghc及其库位于/usr/...其他受保护的位置,则全局安装()当然需要特权,否则sudovs非sudo独立于安装位置.你所做的事情cabal install pony --user(--user理论上是默认的)不应该要求超级用户权限.(我有时在OS X上发现在gcc需要调用的地方请求权限,但这通常是由于我的设置的好奇心.)但无论如何sudo不会影响cabal它们放置的位置:隐式--user和显式--global,更具体的发展咒语,做到这一点.

ghc-pkg list例如,如果您这样做,它将根据package.conf.d它汇总的两个或多个目录将包分成它们注册的不同位置.在我的笔记本电脑上,这些是

/Users/applicative/.ghc/x86_64-darwin-7.0.3/package.conf.d/... 
Run Code Online (Sandbox Code Playgroud)

为当地的东西~/.cabal/lib/...和受保护的

/Library/Frameworks/GHC.framework/Versions/7.0.3-x86_64/usr/lib/ghc-7.0.3/package.conf.d 
Run Code Online (Sandbox Code Playgroud)

对于用Haskell的平台安装全球的装机事情(这个位置涉及到一些OS X的特殊性,ghc,ghci等都是在树林的地方,但对符号链接/usr/bin).不同软件包的conf文件可以准确地告诉您库的安装位置.所以,例如关于神圣的base图书馆,

$ cat base-4.3.1.0-f5c465200a37a65ca26c5c6c600f6c76.conf
Run Code Online (Sandbox Code Playgroud)

告诉我:

import-dirs:
 /Library/Frameworks/GHC.framework/Versions/7.0.3-x86_64/usr/lib/ghc-7.0.3/base-4.3.1.0
library-dirs: 
 /Library/Frameworks/GHC.framework/Versions/7.0.3-x86_64/usr/lib/ghc-7.0.3/base-4.3.1.0
Run Code Online (Sandbox Code Playgroud)

在任何情况下,ghc-pkg list你说的cabal install-ed包在哪里?在~/.cabal文件夹中,查看该文件config.如果您还没有编辑它,我认为注释和未注释的行,如果它们声明了首选项,则说明使用--global和安装的默认值--user.在~.ghc/目录中检查子目录myghcversion/package.conf.d,看看是否有任何东西,这应该与ghc-pkg告诉你的相同.(你可以研究的选项ghc-pkg一般,例如,ghc-pkg check并且ghc-pkg recache,如果你没有,你可能有一些奇怪的方式安装的东西.)

如果您安装ghccabal与合作.通过使用二进制安装程序或包管理器安装Haskell平台,这似乎是一个好主意,我认为,将平台库保持为神圣的东西也是一个好主意,并确保您永远不会从Hackage全局安装任何东西; 除其他事项外,这可能会让你覆盖平台库 - 虽然这似乎并不困难:如果是这样的话会更加明显.