我发现我使用cabal
安装的包没有被GHC找到,Over here是唯一的原因:
当您全局安装软件包,而以前的软件包是在本地安装时,就会发生这种情况。请注意,默认情况下,cabal-install本地安装...
据推测,“本地安装”意味着将包放在~/.cabal/
中。第一个问题:全局安装在哪里?
我一直在使用sudo
运行cabal
,所以我猜这是一个全局安装?我这样做的原因是它在没有sudo
的情况下运行时会抱怨权限,所以这与"cabal-install locally default“的说法相矛盾。第二个问题:如何在本地安装,如何全局安装?
为了解决这个问题,我一直在随机使用sudo ghc-pkg unregister
,并从~/.cabal/
中随机删除一些东西。因此,我的包树被破坏了,可能是局部的和全局的。第三个问题:如何重新开始?
编辑:我正在运行Ubuntu 10.10。我安装了Haskell平台2011。
发布于 2011-06-02 21:24:19
您使用的是Windows、OS X还是某个版本的Linux?您使用的是Haskell平台吗?你以前有过ghc
或cabal
的版本吗?当然,对于Linux发行版,有关包管理器的细微之处可能会出现。(特别是旧ghc
的痕迹,以及旧的~/.ghc/目录可能是问题的根源。)
这里有一些你在#haskell上遇到的类似问题的基本想法。(当然,我的理解还不够充分):
主要的问题似乎是,为什么你会被邀请做本应该是sudo
本地安装的事情?如果ghc及其库位于/usr/...
或其他受保护的位置,则全局安装(cabal install pony --global
)当然需要权限,但除此之外,sudo
与非sudo
是独立于安装位置的。您使用cabal install pony --user
(理论上,--user
是默认设置)所做的操作不需要超级用户权限。(我有时发现在OS上,需要调用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平台安装程序全局安装的东西(此位置涉及一些OS特性,ghc
、ghci
等都在某个地方,但与/usr/bin
有符号链接)。不同软件包的conf文件准确地告诉您这些库的安装位置。例如,关于神圣的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
会说你的cabal install
-ed包要去哪里呢?在~/.cabal
文件夹中,查看文件config
。如果您还没有编辑它,我认为注释行和未注释行说明了--global
和--user
的默认安装设置。在~.ghc/
目录中,检查子目录myghcversion/package.conf.d
并查看其中是否有内容,这应该与ghc-pkg
告诉您的内容相同。(您可以研究ghc-pkg
的一般选项,例如:ghc-pkg check
和ghc-pkg recache
,如果你没有,你可能以某种奇怪的方式安装了一些东西。)
如果您安装了ghc
、cabal
和co。通过使用二进制安装程序或包管理器安装Haskell平台,这似乎是一个好主意,我认为这也是一个好主意,让平台库保持神圣,并确保您永远不会全局安装来自Hackage的任何东西;除此之外,这可能会让您覆盖平台库--尽管这在这里看起来并不困难:如果是这样,它将更加明显。
https://stackoverflow.com/questions/6212833
复制相似问题