2011-06-10 154 views
12

我试图安装一个包(nymphaea,因为它发生)。这取决于比我拥有的基础更早的版本。我并不热衷于降级基础库,所以我想尝试忽略这种依赖关系,并看看事情进展如何。Haskell Cabal:如何忽略依赖关系

有没有办法告诉cabal错过特定的依赖关系?

更新:编辑cabal文件后,我该怎么处理它?据我所知,Cabal没有明显的方法将它指向文件,也没有任何可以手动放置cabal文件的地方。

[按以下,显然我应该只是调用cabal install目录中包含的编辑小集团文件]

更新2:不幸的是,阴谋让我自己被需要的软件包版本,我似乎有一个奇怪的错误:

$ cabal install -v --upgrade-dependencies time 
Reading available packages... 
Resolving dependencies... 
In order, the following would be installed: 
time-1.2.0.5 (new version) 
Extracting 
C:\Users\Marcin\AppData\Roaming\cabal\packages\hackage.haskell.org\time\1.2.0.5\time-1.2.0.5.tar.gz 
to C:\Users\Marcin\time-1.2.0.54736... 
Creating C:\Users\Marcin\time-1.2.0.54736\time-1.2.0.5\dist\setup (and its 
parents) 
C:\Program Files (x86)\Haskell Platform\2011.2.0.1\bin\ghc.exe --make C:\Users\Marcin\time-1.2.0.54736\time-1.2.0.5\Setu 
p.hs -o C:\Users\Marcin\time-1.2.0.54736\time-1.2.0.5\dist\setup\setup.exe -odir C:\Users\Marcin\time-1.2.0.54736\time-1 
.2.0.5\dist\setup -hidir C:\Users\Marcin\time-1.2.0.54736\time-1.2.0.5\dist\setup -i -iC:\Users\Marcin\time-1.2.0.54736\ 
time-1.2.0.5 -package Cabal-1.10.1.0 
<command line>: cannot satisfy -package Cabal-1.10.1.0: 
    Cabal-1.10.1.0-55f781465ee9f32289755ad706c71f0f is unusable due to missing or recursive dependencies: 
     directory-1.1.0.0-3a2367d72569467a8af8a231656ff1b8 process-1.0.1.5-b3dded8e54a2e13d22af410bdcfafff4 
    (use -v for more information) 
World file is already up to date. 
cabal.exe: Error: some packages failed to install: 
time-1.2.0.5 failed during the configure step. The exception was: 
ExitFailure 1 

回答

6

要跟随评论唐的回答:

首先,从Hackage中抓取包。

$ cabal unpack nymphaea 

然后编辑.cabal文件,并更改base <= 4.1.0.0base > 3 && < 5

$ cd nymphaea-0.3 
$ vim nymphaea.cabal 

现在,尝试安装它。

$ cabal install 

我得到了它与Ubuntu上使用纳蒂哈斯克尔平台2011.2.0.1安装所需的Debian软件包后,这种变化工作。

+0

谢谢 - 但对我来说,它仍然不工作,因为另一个神秘的错误(显然时间不会建立,因为它取决于我已经有的包?!?) – Marcin 2011-06-10 23:34:24

+1

@Marcin:很难说没有看到错误信息,但大多数情况下,这些错误是由于缺少非Haskell软件包,或者编译器无法找到它们造成的。我不得不安装'libglade2-dev',但可能还有其他依赖项已经安装。 – hammar 2011-06-10 23:42:00

+0

如果您在意,请参阅我上面的更新(谢谢!)。 – Marcin 2011-06-10 23:43:43

4

您必须编辑与该软件包关联的.cabal文件,并删除您看到的所有基础约束。改变,例如,

base < 3 

base >= 3 && < 5 

,看看它是否编译。如果有效,你可能会碰到版本并让维护人员知道。如果他们没有回应,你可以自己上传固定版本到Hackage。

+0

这是nymphaea.cabal的实际行:'build-depends:base <= 4.1.0.0,random,containers,mtl,parsec,glib,gtk> = 0.10.0,glade,cairo' – 2011-06-10 22:32:00

+0

是的,这就是只是错误的,因为它取决于轻微的转速。试试'base> 3 && <5' – 2011-06-10 22:42:46

+0

这是怎么回事?这是从下载时包含的实际文件复制粘贴。 – 2011-06-10 22:43:45