-
30-09-2019 - |
题
干净安装“ Haskell平台”。 (OS X Snow-Leopard&Platform 2010.1.0.1),这样做会导致简单序列引起非常奇怪的 cabal install
行为:
$ cabal install time
$ cabal install random
$ ghc-pkg list random
/Library/Frameworks/GHC.framework/Versions/612/usr/lib/ghc-6.12.1/package.conf.d
random-1.0.0.2
/Users/yairc/.ghc/i386-darwin-6.12.1/package.conf.d
random-1.0.0.2
random-1.0.0.2
在我的系统中安装了两次。现在做 cabal install random
重新安装 random-1.0.0.2
每次。
好像 random
取决于 time
, ,Cabal想在有新版本的新版本之后重新安装 time
可用的?而且由于两个 random-1.0.0.2
Cabal感到困惑,总是认为它不是最新的,因为它正在看第一个?
ghc-pkg check
找不到错误。
解决方案 3
我将描述迄今为止对我有效的工作。我已经尝试了许多不同的事情,但是我只在这里描述了有效的尝试。
(顺便说一句:我正在使用Mac OS X 10.6.4,您的结果可能在不同的系统上有所不同)
- 我从源安装了GHC 6.12.3。不要删除您以前的GHC,因为建筑GHC需要它。
- 我删除了符号链接
/usr/bin
(为了ghc
,ghci
,ghc-pkg
, , 和runhaskell
)到我以前的GHC,这是Haskell Platform 2010.1.0.1安装程序的GHC。 - 我安装了
cabal-install
使用它bootstrap.sh
脚本。 - 我安装了修补版本的版本
random
和haskell98
软件包。差异只是在他们的.cabal
文件- 撞
random
的版本1.0.0.2.1
并改变了依赖性time
成为time == 1.1.*
- 撞
haskell98
的版本1.0.1.1.1
就是这样
- 撞
- 我跑了
cabal update
和cabal upgrade
查看哪些软件包已过时。我做到了cabal install
那些。我相信这有助于更快地达到稳定状态。 (注意syb
的安装失败,cabal install parsec
说什么时候无关cabal upgrade
说不同。所以我独自留下了这两个包)
我验证了我的设置可以通过运行还可以 ghc-pkg check
在阶段之间。有时它会破裂,因为包装被重新安装在先前版本的版本中,该版本具有相同的版本编号和依赖于其的软件包,需要重新安装。发生这种情况时 cabal install
损坏的包裹。
我还使用以下程序来验证我的设置不包含两个具有相同版本的软件包:
import Data.List (sort)
import Data.Maybe (fromJust)
import System.IO (hGetContents)
import System.Process (CreateProcess (std_out), StdStream (CreatePipe), createProcess, shell)
main :: IO ()
main = do
pkgListRaw <-
createProcess (shell "ghc-pkg list") { std_out = CreatePipe }
>>= hGetContents . fromJust . sndOfFourTup
let pkgListSorted = sort . filter (not . null) $ lines pkgListRaw
putStrLn .
unlines . map (dropWhile (== ' ') . fst) .
filter (uncurry (==)) . zip pkgListSorted $ tail pkgListSorted
where
sndOfFourTup (_, x, _, _) = x
我
cabal install
edhlint
,yesod
,haddock
,HDBC-mysql
,hakyll
和其他包裹,然后我cabal install
ED一次又一次地列表,直到我的设置达到“稳定状态”cabal install
不会重新安装任何一个。我验证了我自己正在研究的程序是否正在编译和工作。现在一切都很好
笔记:
- 我无法获得Haskell Platform 2010.1.0.1工作。在我升级到GHC 6.12.3之后,事情只对我有用。具有讽刺意味的是(?),这违反了GHC下载页面上的建议:
停止!
对于大多数用户,我们建议安装Haskell平台而不是GHC。当前的Haskell平台版本包括最近的GHC版本以及其他一些工具(例如Cabal),以及已知可以一起工作的较大库。
这项工作可能也可能会在将来的某个时间中断。我想这可能会在几个月内发生。像核心库一样
random
将会更新,然后依赖性问题将再次开始解散。然后,我/您必须花时间修复我们的设置。也许那时需要升级到较新的GHC。但是谁知道,也许那时将是一个较旧的版本,随着攻击软件包的更新以解决依赖关系问题,它将变得稳定。作为对您的服务,我将更新此问题,并在时间到来时回答。 (假设其他人也遇到了这个问题。到目前为止,我证实了Simon Marlow和Peaker也面临这个问题)知道您的haskell设置被打破的方法(如果这些设置为true,则该设置被打破了):
- 没有什么可用
ghc-pkg check
说它坏了- 我在上面放置此答案的简短程序发现您已安装了两次包装的包装,与完全相同的版本
cabal update
然后循环cabal install
在上面写的包装列表或另一个列表(最好是具有很多依赖项的大包装列表)。如果您从未达到稳定的状态(周期的迭代总是重新安装某些东西),那么您的设置就会破坏。 警告: :此步骤可能会破坏您当前运行的Haskell设置。如果您很有趣或愿意修复设置后,请执行此操作(这可能很耗时)
我想知道您的设置是否破坏还是工作。这可以帮助我。例如,如果我们发现GHC 6.10设置工作正常,则我可以在向某人推荐Haskell等的情况下向人们推荐这些设置。
我希望这有助于其他人面临相同或相似问题的人。非常感谢西蒙·马洛(Simon Marlow)和约翰(John)!
其他提示
请这样做
ghc-pkg check
如果没有显示错误,让我们看看
ghc-pkg list -v
和
cabal install random -v
编辑: :我可以使用GHC 6.12.1复制您的问题,但可以使用6.12.2,使用Cabal-Anstall(0.8.0)的版本完全相同。我会研究它。
编辑2: 报告为错误 在Cabal-install中。
我有两种可能的解决方案,这两种解决方案都有些危险,但应该为您提供工作安装。我很高兴西蒙(Simon)遵循这一点,因为对我来说这听起来像是某种错误。要获得工作安装,我将首先尝试以下内容:
ghc-pkg unregister random
然后,随机执行GHC-PKG列表以查看已安装的内容。我猜(但我不确定)您仍然拥有 / /库 /框架版本(来自平台),但新安装的版本将消失。如果是这种情况,请继续下一步。如果不是,您可能需要对平台进行干净的重新安装。
假设平台随机存在,请执行此操作:
cabal unpack random
CD到目录中,将其拆箱并通过将版本撞到1.0.0.2.1(添加另一个字段并将其递增)来编辑.Cabal文件。然后从该目录中安装Cabal,它应该安装新的随机。由于它的版本与平台随机不同,因此两者可以安全地共存。
您可以将注册文件直接从
/USERS/YAIRC/.ghc/i386-darwin-6.12.1/package.conf.d
该文件名称将附加一个哈希,因此您需要查看目录内容以实际获取该值。只需删除文件,GHC-PKG和Cabal就不应该从那时看到它。这不会触及平台的安装(从这个意义上讲,它更安全),但是潜力仍然是软管其他安装的软件包。之后,您可以通过解开包装和上述版本来重新安装随机软件包。