2013-01-05 26 views
9

Làm việc với Cabal quá mệt mỏi, tôi đang giữ một bản sao của tệp .cabal làm việc mới nhất của mình để khi một số gói khác (đặc biệt là các tệp thực thi như hakyll, mất vĩnh viễn để cài đặt lại) bị hỏng, tôi có thể tải lại từ điểm lưu mới nhất .có giải pháp nào cho Cabal bị hỏng cài đặt lại không?

Nhưng nó vẫn không làm cho một số nội dung dễ dàng hơn bởi vì tôi không thể cài đặt một số gói mà không cần cài hoàn toàn gói của tôi trong thứ tự khác nhau (ví dụ. Các gói mà phá vỡ những người khác nên được cài đặt trước khi những người khác, vv)

Ví dụ, đây là những gì sẽ xảy ra khi tôi cố gắng để cài đặt cabal-dev (mà là một gói rất quan trọng đối với tôi):

➜ ~ cabal install cabal-dev 
Resolving dependencies... 
In order, the following would be installed: 
bytestring-0.9.2.1 (new version) 
containers-0.4.2.1 (new version) 
template-haskell-2.8.0.0 (reinstall) changes: containers-0.5.0.0 -> 0.4.2.1 
text-0.11.2.3 (reinstall) changes: bytestring-0.10.0.0 -> 0.9.2.1 
transformers-0.2.2.0 (new version) 
mtl-2.0.1.0 (new version) 
parsec-3.1.3 (reinstall) changes: bytestring-0.10.0.0 -> 0.9.2.1, mtl-2.1.2 -> 
2.0.1.0 
unix-2.3.2.0 (new version) 
directory-1.0.0.3 (new version) 
network-2.3.2.0 (new version) 
HTTP-4000.2.6 (reinstall) changes: bytestring-0.10.0.0 -> 0.9.2.1, mtl-2.1.2 
-> 2.0.1.0, network-2.4.0.1 -> 2.3.2.0 
process-1.1.0.2 (reinstall) changes: directory-1.2.0.0 -> 1.0.0.3, 
unix-2.6.0.0 -> 2.3.2.0 
Cabal-1.14.0 (new version) 
tar-0.3.2.0 (new package) 
zlib-0.5.4.0 (reinstall) changes: bytestring-0.10.0.0 -> 0.9.2.1 
cabal-dev-0.9.1 (new package) 
cabal: The following packages are likely to be broken by the reinstalls: 
shakespeare-1.0.2 
hamlet-1.1.2 
hakyll-3.5.2.0 
lens-3.7.1.2 
ghc-7.6.1 
haddock-2.13.1 
data-lens-template-2.1.7 
cmdargs-0.10.1 
hoogle-4.2.14 
QuickCheck-2.5.1.1 
Extra-1.46 
ipprint-0.4.2 
xml-1.3.12 
texmath-0.6.1.1 
pandoc-1.9.4.5 
wai-1.3.0.1 
warp-1.3.6 
tagsoup-0.12.8 
snap-server-0.9.2.4 
snap-core-0.9.2.2 
regex-tdfa-1.1.8 
Unixutils-1.52 
network-2.4.0.1 
simple-sendfile-0.2.10 
network-conduit-0.6.2.1 
citeproc-hs-0.3.6 
language-lua-0.1.4 
json-0.7 
highlighting-kate-0.5.3.3 
ddc-base-0.3.1.1 
ddc-driver-0.3.1.3 
ddc-core-simpl-0.3.1.1 
ddc-core-llvm-0.3.1.1 
ddc-build-0.3.1.3 
ddc-core-salt-0.3.1.1 
ddc-core-eval-0.3.1.1 
ddc-core-0.3.1.1 
http-types-0.7.3.0.1 
hexpat-0.20.3 
hashable-1.2.0.2 
vault-0.2.0.3 
unordered-containers-0.2.3.0 
uniplate-1.6.10 
case-insensitive-0.4.0.4 
enumerator-0.4.19 
zlib-enum-0.2.3 
blaze-builder-enumerator-0.2.0.5 
attoparsec-enumerator-0.3.1 
conduit-0.5.5 
blaze-builder-conduit-0.5.0.3 
blaze-markup-0.5.1.4 
blaze-html-0.5.1.3 
blaze-builder-0.3.1.0 
attoparsec-0.10.3.0 
haskell98-2.0.0.2 
Cabal-1.16.0 
bin-package-db-0.0.0.0 
zlib-bindings-0.1.1.2 
zip-archive-0.1.2.1 
Use --force-reinstalls if you want to install anyway. 

Và chỉ workaround cho điều này là để cài đặt cabal-dev trước một số gói khác trong danh sách đó. Nhưng tôi nghĩ ngay cả khi tôi làm điều đó, nó không đảm bảo rằng một số gói khác sẽ không bị mâu thuẫn.

Bây giờ tôi tự hỏi làm thế nào bạn xử lý xung đột trong cài đặt cabal của bạn, và nếu có một sửa chữa cho việc này. Tôi chỉ không thể cài đặt tất cả các thư viện tôi cần với Cabal. Bất kỳ trợ giúp sẽ được đánh giá cao.

+0

Điều trớ trêu là đây là loại vấn đề cabal-dev được thiết kế để hoạt động. Để cài đặt cabal-dev, trước tiên bạn phải cài đặt cabal dev. Có ai có một hệ điều hành được đánh giá lười biếng nằm xung quanh? – AndrewC

Trả lời

7

Các vấn đề trong trường hợp này không phải là Cabal hoặc cabal cài đặt (1), it's cabal-dev:

if impl(ghc >= 6.12) 
    Build-depends: 
    containers >= 0.3 && < 0.5 

Vì vậy, với GHC-7.6.1, nó từ chối sử dụng gói containers đi kèm với nó : rất tệ.

-- Require this specific version that came with GHC 6.10 because 
-- of packaging problems with containers-0.2 
if impl(ghc == 6.10) 
    Build-depends: 
    containers == 0.2.0.1 

if impl(ghc == 6.8) 
    Build-depends: 
    containers == 0.1.0.2 

Build-depends: 
    bytestring >= 0.9 && < 0.10, 

Nó không chấp nhận phiên bản bytestring hoặc

directory >= 1.0 && < 1.3, 
    filepath >= 1.1 && < 1.4, 
    Cabal >= 1.10.0.0 && < 1.15, 

cũng không phải là phiên bản Cabal

HTTP >= 4000.0.9 && < 4000.3, 
    mtl >= 1.1 && < 2.1, 

nó có thể sẽ không được hạnh phúc với phiên bản mtl bạn có

network >= 2.2 && < 2.4, 

hoặc network

pretty >= 1.0 && < 1.2, 
    process >= 1.0 && < 1.2, 
    tar >= 0.3 && < 0.4, 
    zlib >= 0.5 && < 0.6, 
    transformers >= 0.2 && < 0.3, 

hoặc transformers

-- Template haskell is special: the compiler will die if a 
    -- version other than the one that is shipped with the compiler 
    -- is used. Here, we don't constrain the version and hope that 
    -- there will be only one. 
    template-haskell 

Theo this, GHC-7.6.1 nên hài lòng với phiên bản github, vì vậy bản sao và xây dựng đó.

(1) Vâng, một phần của sự lộn xộn là do hackage page không hiển thị tất cả phụ thuộc cho cabal-dev, chỉ những cho ghc-pkg-6_8-compat, cụ thể là basecabal, vì vậy nó không phải là rõ ràng rằng cabal-dev-0.9.1 không hoạt động với ghc-7,6.

+0

Không phải tất cả điều này đã được sửa trong phiên bản chính? –

+0

Tôi không biết, phiên bản mainline là gì, repo? Nếu nó cố định, tại sao họ không tải lên một phiên bản cố định để hack? –

+0

Cái trên GitHub. Ví dụ: phụ thuộc vùng chứa [được thoải mái trong dòng chính] (https://github.com/creswick/cabal-dev/blob/master/cabal-dev.cabal): 'containers> = 0.3 && <0.6'. –

Các vấn đề liên quan