2012-10-15 51 views
5

我试图安装需要与我安装的版本不同的版本的软件包(我有4.6.0.0,它们需要< 4.6)。我怎样才能在我的系统上安装这些?如果库需要不同版本的`base`,该怎么办?

编辑:这些包实际上需要较旧的包才能构建,而不仅仅是作为.cabal约束。

回答

4

既然你可以重新安装base,在更新之前安装这些软件包的唯一方法是获取源代码,

cabal unpack foo 

,然后编辑foo.cabal,改变上限base那里,凹凸的包版本(追加.1),以便安装其他包时cabal不认为它是坏了,因为.cabal文件就知道(从包索引)表示它需要不同版本的base

cabal install 

从您解压缩到的目录。

由于base-4.6有一些重大变化,的EqShow超类已经从Num除去,Bits不再具有Num作为超类则它可能有必要通过添加EqShowNum到的某些功能,以使包编译约束修复代码。

这很不方便,但价格为最新的GHC版本几个星期自己最新。

+0

如果我这样做,我会收到一条消息,告诉我它无法满足base的约束,并终止安装。 – bfops

+0

什么?编辑'.cabal'文件以允许base-4.6? –

+0

@RobotGymnast您试图安装哪个软件包? –

1

如果您只是想让其中一个程序依赖于这些软件包,则可以使用cabal-dev作为cabal的插入式替代品。前者在当前目录的cabal-dev路径中安装软件包的本地副本。要安装它,只需运行:

cabal install cabal-dev 

对于便携性,你可以像这样添加一些makefile文件:

CABAL ?= cabal 

build : 
    $(CABAL) build --builddir=$(BUILD_PATH) 

然后在您的Bash设置:

CABAL=cabal-dev 
export CABAL 
1

如果软件包与您当前拥有的基本版本不兼容(即只是更改约束不足),则您唯一的选择是自己移植软件包或使用提供正确基本版本的旧版ghc。

虽然你可能想首先与包维护者核对一下。一个开发分支可能已经支持你所需要的,他们只需要一点点刺激来释放它。

相关问题