2011-03-21 44 views
13

所以,这有点个人问题,但也许人们会有很好的建议或解决方法。cabal-install和Debian

问题是关于在Debian下安装cabal-install和haskell-platform。

当您apt-get install haskell-platform,它配有cabal-install,其命令cabal可用。

现在这cabal-install是达不到最新:

> which cabal 
/usr/bin/cabal 
> /usr/bin/cabal --version 
cabal-install version 0.8.0 
using version 1.8.0.2 of the Cabal library 

但是,我跑cabal update的理解是,它更新的阴谋,但因为它不是一个“Debian的啄”,它把它在~/.cabal/bin/

> ~/.cabal/bin/cabal --version 
cabal-install version 0.8.2 
using version 1.8.0.2 of the Cabal library 

现在我的系统有2个cabals,和一个我得到通过键入cabal是不是我想用...因为它会不断更新的另一种替代本身,因此是无效的。

所以我所做的就是我在~/.bashrc别名是:

alias cabal='~/.cabal/bin/cabal' 

现在:

> cabal --version 
cabal-install version 0.8.2 
using version 1.8.0.2 of the Cabal library 

所以,我最后的问题:

  • 有一个deb存储库拥有cabal 0.8.2?
  • 我目前的解决方案是否会导致问题? (例如,which cabal仍然指向我没用的/usr/bin/cabal,所以如果脚本使用这个命令,他们会被愚弄...)
  • 有人想出了一个更好的解决方案? (我有点特别,但这就是我所能想出的幕后幕后发生的事情......)
  • 如果我上面说的任何内容是错误或不准确的,请纠正我。
+1

+1。我不明白为什么Haskell需要自己的包管理器,而其他语言却没有。 – harpo 2011-03-21 16:56:38

+5

很多语言都有自己的包管理器?例如RubyGems在Ruby社区中非常流行。 – dbyrne 2011-03-21 17:06:15

+0

gem for ruby​​,pip或easy_install for python,maven及其衍生物for Java,...对于广泛使用第三方库的用户,依靠OS包管理系统并不总是最佳选择。特别是保守的操作系统像Debian。我必须跟上一些正在大力发展中的图书馆的最新版本(作为客户端,而不是开发者),并且每次都手动安装它们将会非常困难。 – 2012-05-28 11:28:00

回答

13

我所做的就是安装标志。这将安装cabal到/usr/local/bin/cabal,因此它将总是取代Debian软件包cabal。

另一种方法是通常避免使用Debian软件包并直接从源代码安装Haskell平台。如果你总是希望拥有Haskell库的最新版本,这种方法也会更好。

+1

这很有趣。所以我做的工作是:> su> cabal update> cabal install cabal-install --global> exit>(这里我从我的.bashrc中删除了我的别名,并重新打开终端),现在它运行良好!谢谢。 – Ptival 2011-03-21 17:31:59

11

我将我的用户本地$HOME/.cabal/bin保留在PATH的前面。 我只从分发包安装ghc6,ghc6-prof,ghc6-doccabal-install。除了引导新的~/.cabal以外,我不会使用分配cabal-install。 所有其他我安装cabal install,其中包括较新的cabal本身。

当我想用较新的GHC,我在/usr/local/stow/ghcVERSION部署,并与GNU stow启用(将其添加在/usr/local这又具有优先权在我PATH符号连接)。当我想切换回分配GHC时,我只需运行stow -D即可删除所有符号链接。

我认为使用cabal-dev具有项目特定的cabal安装,并避免不时发生与cabal发生破碎的依赖关系。

事实上,我根本不使用Haskell平台,因为我不需要它,并且发现它更容易安装单个库。我不安装发行版库,因为它们并非全部都可用,或者完全是我需要的版本;如果所有的人都安装在同一个地方(我的情况为~/.cabal),控制冲突要容易得多。我不会安装任何与--global,因为我认为这是错误的,难以回滚。

+0

谢谢你,这很有趣。如果我遇到任何问题/烦恼,我可能会切换到此。 – Ptival 2011-03-21 18:44:47

1

在Ubuntu上,我也倾向于通过stow安装GHC,完全忽略系统软件包。

jetxee的方法有一点轻微的转变,那就是我安装了Haskell Platform(源代码),将它与GHC stow目录结合在一起。我想我应该调用路径/usr/local/stow/haskell-platform-VERSION,但我倾向于使用​​来代替。

4

当然,这些信息已经过时了,但是,在编写本文时,Debian不稳定,并且测试已经有了cabal-install 0.10.2。

一般来说,Haskell stuff的Debian包装是针对那些需要一套已知可以一起工作的软件包的用户,即不需要依赖地狱,而不是总是拥有最新和最好的软件包。这包括cabal安装。我使用cabal-install从存储库中,只安装那些尚未被Debian打包的库。

声明:我是为Debian创建这些软件包的人之一。

+0

够公平的,我明白你不能满足每个人的需求,也没有那么繁琐的选择。 – Ptival 2011-09-21 21:58:47