Over here是我发现GHC找不到使用cabal
安装的软件包的唯一原因:
当您全局安装软件包时,会发生这种情况,并且以前的软件包是在本地安装的。请注意,cabal-install默认情况下在本地安装[...]
据推测,“本地安装”意味着将包放入~/.cabal/
。第一个问题:全局安装在哪里?
我一直在使用cabal
运行sudo
,所以我猜这是全局安装?我之所以这样做是因为它在没有sudo
的情况下运行时会抱怨权限,所以这与“默认情况下cabal-install install”这句话相矛盾。第二个问题:如何在本地安装以及如何全局安装?
试图解决这个问题,我一直在随机使用sudo ghc-pkg unregister
并随机删除~/.cabal/
中的内容。因此,我的包树可能已破坏,可能是本地和全局的。第三个问题:如何重新开始?
编辑:我正在运行Ubuntu 10.10。我安装了Haskell Platform 2011。
答案 0 :(得分:8)
您使用的是Windows,OS X还是某些版本的Linux?你在使用Haskell平台吗?您之前有ghc
或cabal
版本吗?对于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特性,ghc
,ghci
等等都在树林中,但符号链接到{{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-pkg
和ghc-pkg check
,如果还没有。您可能已经以某种奇怪的方式安装了某些东西。)
如果你安装了ghc-pkg recache
和ghc
和co。通过使用二进制安装程序或包管理器安装Haskell平台,这似乎是一个好主意,我认为,将平台库保持为神圣的东西也是一个好主意,并确保您永远不会从Hackage全局安装任何东西;除了其他方面,这可能会让你覆盖平台库 - 虽然这似乎不是困难:如果它是更明显的。