首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Haskell cabal:我刚刚安装了软件包,但现在找不到这些软件包

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

Stack Overflow用户
提问于 2011-06-02 17:44:43
回答 1查看 11K关注 0票数 22

我发现我使用cabal安装的包没有被GHC找到,Over here是唯一的原因:

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

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

我一直在使用sudo运行cabal,所以我猜这是一个全局安装?我这样做的原因是它在没有sudo的情况下运行时会抱怨权限,所以这与"cabal-install locally default“的说法相矛盾。第二个问题:如何在本地安装,如何全局安装?

为了解决这个问题,我一直在随机使用sudo ghc-pkg unregister,并从~/.cabal/中随机删除一些东西。因此,我的包树被破坏了,可能是局部的和全局的。第三个问题:如何重新开始?

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

EN

回答 1

Stack Overflow用户

发布于 2011-06-02 21:24:19

您使用的是Windows、OS X还是某个版本的Linux?您使用的是Haskell平台吗?你以前有过ghccabal的版本吗?当然,对于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目录,将包划分到它们注册的不同位置。在我的笔记本电脑上,这些是

代码语言:javascript
复制
/Users/applicative/.ghc/x86_64-darwin-7.0.3/package.conf.d/... 

对于~/.cabal/lib/...中的本地内容和受保护的

代码语言:javascript
复制
/Library/Frameworks/GHC.framework/Versions/7.0.3-x86_64/usr/lib/ghc-7.0.3/package.conf.d 

对于使用Haskell平台安装程序全局安装的东西(此位置涉及一些OS特性,ghcghci等都在某个地方,但与/usr/bin有符号链接)。不同软件包的conf文件准确地告诉您这些库的安装位置。例如,关于神圣的base库,

代码语言:javascript
复制
$ cat base-4.3.1.0-f5c465200a37a65ca26c5c6c600f6c76.conf

告诉我:

代码语言:javascript
复制
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 checkghc-pkg recache,如果你没有,你可能以某种奇怪的方式安装了一些东西。)

如果您安装了ghccabal和co。通过使用二进制安装程序或包管理器安装Haskell平台,这似乎是一个好主意,我认为这也是一个好主意,让平台库保持神圣,并确保您永远不会全局安装来自Hackage的任何东西;除此之外,这可能会让您覆盖平台库--尽管这在这里看起来并不困难:如果是这样,它将更加明显。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6212833

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档