2011-06-10 106 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