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

时间:2011-06-02 09:44:43

标签: haskell cabal

Over here是我发现GHC找不到使用cabal安装的软件包的唯一原因:

  

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

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

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

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


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

1 个答案:

答案 0 :(得分:8)

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

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

主要问题似乎是,为什么要邀请您使用sudo进行本地安装?如果ghc及其库位于cabal install pony --global或其他受保护的位置,则全局安装(/usr/...)当然需要特权,否则sudo与非 - 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/... 

表示~/.cabal/lib/...中的本地内容和受保护的

/Library/Frameworks/GHC.framework/Versions/7.0.3-x86_64/usr/lib/ghc-7.0.3/package.conf.d 

对于使用Haskell Platform安装程序全局安装的内容(此位置涉及一些OS X特性,ghcghci等等都在树林中,但符号链接到{{1} })。不同软件包的conf文件可以准确地告诉您库的安装位置。所以,例如关于神圣的/usr/bin库,

base

告诉我:

$ cat base-4.3.1.0-f5c465200a37a65ca26c5c6c600f6c76.conf

在任何情况下,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 在哪里说你的ghc-pkg list - ed套餐会发生什么?在cabal install文件夹中,查看文件~/.cabal。如果您还没有对其进行编辑,我认为注释和未注释的行(如果他们声明了首选项)是使用config--global说明安装的默认值。在--user目录中,查看子目录~.ghc/并查看是否存在任何内容,该内容应与myghcversion/package.conf.d告诉您的内容相同。 (您可以研究ghc-pkg的一般选项,例如。ghc-pkgghc-pkg check,如果还没有。您可能已经以某种奇怪的方式安装了某些东西。)

如果你安装了ghc-pkg recacheghc和co。通过使用二进制安装程序或包管理器安装Haskell平台,这似乎是一个好主意,我认为,将平台库保持为神圣的东西也是一个好主意,并确保您永远不会从Hackage全局安装任何东西;除了其他方面,这可能会让你覆盖平台库 - 虽然这似乎不是困难:如果它是更明显的。