在这里我唯一的原因是我cabal
发现GHC没有找到我正在安装的软件包:
全局安装软件包时会发生这种情况,并且以前的软件包是在本地安装的.请注意,cabal-install默认安装在本地[...]
据推测,"本地安装"意味着将包装放入~/.cabal/
.第一个问题:全球安装在哪里?
我一直在cabal
使用sudo
,所以我猜这是一个全局安装?我之所以这样做是因为它在没有运行时会抱怨权限sudo
,所以这与"默认情况下cabal-install install"这句话相矛盾.第二个问题:如何在本地安装以及如何全局安装?
试图修复这个烂摊子,我一直在随机使用sudo ghc-pkg unregister
并随机删除~/.cabal/
.因此,我的包树可能已破坏,可能是本地和全局的.第三个问题:我该如何重新开始?
编辑:我正在运行Ubuntu 10.10.我安装了Haskell Platform 2011.
您使用的是Windows,OS X还是某些版本的Linux?你在使用Haskell平台吗?你有ghc
或cabal
之前的版本?对于Linux发行版,当然可能会有关于包管理器的细微之处.(ghc
特别是旧的痕迹,旧的〜/ .ghc /目录可能是麻烦的来源.)
以下是关于#haskell遇到此类问题的类型的一些基本想法.(当然,我的理解力还不够):
主要问题似乎是,为什么你被邀请做本地安装应该做什么sudo
?cabal install pony --global
如果ghc及其库位于/usr/...
其他受保护的位置,则全局安装()当然需要特权,否则sudo
vs非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
,如果你没有,你可能有一些奇怪的方式安装的东西.)
如果您安装ghc
并cabal
与合作.通过使用二进制安装程序或包管理器安装Haskell平台,这似乎是一个好主意,我认为,将平台库保持为神圣的东西也是一个好主意,并确保您永远不会从Hackage全局安装任何东西; 除其他事项外,这可能会让你覆盖平台库 - 虽然这似乎并不困难:如果是这样的话会更加明显.