2010-06-25 33 views
9

Với cài đặt "Nền tảng Haskell" rõ ràng. (OS X Snow Leopard-& vBulletin 2010.1.0.1), làm điều này gây ra chuỗi đơn giản gây ra rất lạ cabal install hành vi:vấn đề cài đặt cabal bí ẩn

$ cabal install time 

$ cabal install random 

$ ghc-pkg list random 
/Library/Frameworks/GHC.framework/Versions/612/usr/lib/ghc-6.12.1/package.conf.d 
    random-1.0.0.2 
/Users/yairc/.ghc/i386-darwin-6.12.1/package.conf.d 
    random-1.0.0.2 

random-1.0.0.2 được cài đặt hai lần trong hệ thống của tôi. và hiện đang thực hiện cabal install random reinstalls random-1.0.0.2 mỗi lần.

Có vẻ như random phụ thuộc vào time và cabal muốn cài đặt lại sau khi có phiên bản time mới? Và vì hai số random-1.0.0.2 cabal bị nhầm lẫn và luôn nghĩ rằng nó không được cập nhật vì nó đang xem cái đầu tiên?

ghc-pkg check không tìm thấy lỗi.

Trả lời

2

Tôi sẽ mô tả công việc xung quanh đã hoạt động cho đến giờ đối với tôi. Tôi đã thử nhiều thứ khác nhau nhưng tôi sẽ chỉ mô tả ở đây nỗ lực làm việc.

(btw: Tôi đang sử dụng Mac OS X 10.6.4 và kết quả của bạn có thể khác nhau trên các hệ thống khác nhau)

  • Tôi đã cài đặt GHC 6.12.3 từ nguồn. Không loại bỏ GHC trước đây của bạn khi xây dựng GHC yêu cầu nó.
  • tôi loại bỏ các liên kết tượng trưng tại /usr/bin (ví ghc, ghci, ghc-pkg, và runhaskell) để GHC trước đây của tôi đó là một từ Cương lĩnh Haskell 2010.1.0.1 trình cài đặt.
  • Tôi đã cài đặt cabal-install bằng cách sử dụng mã số bootstrap.sh.
  • Tôi đã cài đặt các phiên bản được vá của các gói randomhaskell98. Sự khác biệt chỉ là trong .cabal tập tin của họ
    • đụng 'phiên bản s lên đến 1.0.0.2.1 và thay đổi nó sự phụ thuộc vào timetime == 1.1.*
    • đụng haskell98' random phiên bản s lên đến 1.0.1.1.1 và đó là nó
  • Tôi chạy cabal updatecabal upgrade để xem gói nào đã lỗi thời. Tôi đã làm cabal install những thứ đó. Tôi tin rằng điều này giúp đạt được trạng thái ổn định nhanh hơn. (Lưu ý rằng syb 's cài đặt thất bại và rằng cabal install parsec nói không có gì để làm gì về nó là khi cabal upgrade nói cách khác nhau. Vì vậy, tôi rời hai gói một mình)

Tôi xác nhận rằng thiết lập của tôi là ok bằng cách chạy ghc-pkg check giữa các giai đoạn. Đôi khi nó phá vỡ vì một gói được cài đặt lại trên một phiên bản trước đó với cùng một số phiên bản và các gói phụ thuộc vào nó cần phải được cài đặt lại. Khi điều đó xảy ra, tôi cabal install lại các gói bị hỏng.

Tôi cũng sử dụng các chương trình sau đây để xác minh rằng thiết lập của tôi không chứa hai gói với các phiên bản giống nhau:

import Data.List (sort) 
import Data.Maybe (fromJust) 
import System.IO (hGetContents) 
import System.Process (CreateProcess (std_out), StdStream (CreatePipe), createProcess, shell) 

main :: IO() 
main = do 
    pkgListRaw <- 
     createProcess (shell "ghc-pkg list") { std_out = CreatePipe } 
     >>= hGetContents . fromJust . sndOfFourTup 
    let pkgListSorted = sort . filter (not . null) $ lines pkgListRaw 
    putStrLn . 
     unlines . map (dropWhile (== ' ') . fst) . 
     filter (uncurry (==)) . zip pkgListSorted $ tail pkgListSorted 
    where 
     sndOfFourTup (_, x, _, _) = x 
  • tôi cabal install ed hlint, yesod, haddock, HDBC-mysql, hakyll và khác gói và sau đó tôi cabal install chỉnh sửa danh sách trước đó một lần nữa và một lần nữa cho đến khi thiết lập của tôi đạt đến "trạng thái ổn định" trong đó cabal install không cài đặt lại bất kỳ thứ gì trong số đó.

  • Tôi đã xác minh rằng các chương trình của riêng tôi hiện đang làm việc để biên dịch và hoạt động.Tất cả có vẻ là ổn rồi

Ghi chú:

  • tôi không thể có được Haskell vBulletin 2010.1.0.1 để làm việc. Mọi thứ chỉ làm việc cho tôi sau khi tôi nâng cấp lên GHC 6.12.3. Trớ trêu thay (?), Điều này đi ngược lại đề nghị trên trang tải xuống của GHC:

Dừng lại!

Đối với hầu hết người dùng, chúng tôi khuyên bạn nên cài đặt Nền tảng Haskell thay vì GHC. Bản phát hành Haskell Platform hiện tại bao gồm bản phát hành GHC gần đây cũng như một số công cụ khác (chẳng hạn như cabal) và một nhóm thư viện lớn hơn được biết là làm việc cùng nhau.

  • công việc xung quanh này có lẽ sẽ phá vỡ đôi khi trong tương lai là tốt. Tôi đoán rằng điều này có thể sẽ xảy ra trong một vài tháng. Một thư viện cốt lõi như random sẽ được cập nhật và sau đó các vấn đề phụ thuộc sẽ bắt đầu làm sáng tỏ một lần nữa. Sau đó, tôi sẽ/bạn sẽ phải dành thời gian để thiết lập các thiết lập của chúng tôi. Có lẽ sau đó nó sẽ yêu cầu nâng cấp lên một GHC mới hơn. Nhưng những người hiểu biết, có lẽ sau đó nó sẽ là một phiên bản cũ sẽ trở nên ổn định như gói hackage được cập nhật để giải quyết vấn đề phụ thuộc liên quan. Là một dịch vụ cho bạn, tôi sẽ cập nhật câu hỏi và câu trả lời này khi thời gian đến. (Giả sử rằng những người khác đang gặp phải vấn đề này. Cho đến nay tôi đã xác nhận rằng Simon Marlow và Peaker cũng phải đối mặt với vấn đề này)

  • Cách để biết rằng thiết lập Haskell của bạn bị hỏng (nếu bất kỳ điều này là đúng thì thiết lập bị hỏng):

    • Không có gì làm việc
    • ghc-pkg check nói rằng nó được chia
    • chương trình ngắn có nguồn tôi đặt trong câu trả lời này trên thấy rằng bạn có một gói cài đặt hai lần với cùng phiên bản chính xác
    • cabal update và sau đó chu kỳ cabal install nhập danh sách các gói tôi đã viết ở trên hoặc danh sách khác (tốt nhất là một gói lớn có nhiều phụ thuộc). Nếu bạn không bao giờ đạt được trạng thái ổn định (một vòng lặp của chu kỳ luôn cài đặt lại một cái gì đó) thì thiết lập của bạn bị hỏng. CẢNH BÁO: Bước này có thể hủy cài đặt Haskell hiện đang hoạt động của bạn. Làm điều này nếu bạn tò mò hoặc sẵn sàng sửa chữa thiết lập của bạn sau khi nó bị hỏng (quá trình có thể tốn thời gian)
  • Tôi muốn biết liệu các thiết lập của bạn bị hỏng hay đang hoạt động. Điều này có thể giúp tôi. Ví dụ, nếu chúng ta thấy rằng GHC 6.10 thiết lập đang làm việc tốt, I/U có thể giới thiệu những thiết lập cho người dân nhân dịp giới thiệu với ai đó để thử Haskell, vv

Tôi hy vọng rằng điều này sẽ giúp những người khác phải đối mặt với các vấn đề tương tự hoặc tương tự. Rất cám ơn Simon Marlow và John!

6

Xin đừng

ghc-pkg check 

và nếu điều đó cho thấy không có lỗi, chúng ta hãy xem kết quả từ

ghc-pkg list -v 

cabal install random -v 

Sửa: Tôi có thể tái tạo vấn đề của bạn với GHC 6.12.1, nhưng không phải với 6.12.2, sử dụng chính xác cùng một câu ion cài đặt cabal (0.8.0). Tôi sẽ xem xét nó.

Chỉnh sửa 2: reported as a bug khi cài đặt cabal.

+0

cảm ơn bạn đã hiển thị! :) Tôi đã thêm các kết quả đầu ra cho các lệnh đó vào câu hỏi của tôi – yairchu

2

Tôi có hai giải pháp khả thi, cả hai đều có phần nguy hiểm nhưng sẽ giúp bạn cài đặt hoạt động. Tôi rất vui vì Simon đã theo dõi điều này bởi vì nó giống như một loại lỗi đối với tôi. Để cài đặt hoạt động, tôi sẽ thử các bước sau:

ghc-pkg unregister random 

sau đó làm danh sách ghc-pkg ngẫu nhiên để xem những gì được cài đặt. Tôi đoán (nhưng tôi không chắc chắn) rằng bạn vẫn sẽ có phiên bản/Library/Frameworks (từ Nền tảng) nhưng phiên bản mới được cài đặt sẽ biến mất. Nếu trường hợp này xảy ra, hãy chuyển sang bước tiếp theo. Nếu nó không phải là bạn có thể sẽ cần phải làm một cài đặt lại sạch của nền tảng này.

Giả sử nền tảng này ngẫu nhiên vẫn còn hiện diện, làm điều này:

cabal unpack random 

cd vào thư mục nó giải nén vào, và chỉnh sửa các tập tin .cabal bởi chạm phiên bản để 1.0.0.2.1 (thêm lĩnh vực khác và tăng nó lên một). Sau đó, cabal cài đặt từ thư mục đó và nó sẽ cài đặt ngẫu nhiên mới. Vì điều này có một phiên bản khác với nền tảng ngẫu nhiên, cả hai có thể cùng tồn tại một cách an toàn.

Thay vì làm GHC-pkg unregister, bạn có thể trực tiếp xóa các tập tin đăng ký từ

/Users/yairc/.ghc/i386-darwin-6.12.1/package.conf.d

tên tệp sẽ có băm được nối vào nó, vì vậy bạn sẽ cần xem nội dung thư mục để thực sự nhận được giá trị.Chỉ cần xóa tập tin và ghc-pkg và cabal sẽ không nhìn thấy nó từ đó trở đi. Điều này sẽ không chạm vào cài đặt nền tảng (vì vậy nó an toàn hơn trong ý nghĩa đó), nhưng tiềm năng vẫn còn đó để vòi gói cài đặt khác. Sau đó, bạn có thể cài đặt lại gói ngẫu nhiên bằng cách giải nén và tăng phiên bản như trên.

+0

Tôi đã thử một cái gì đó tương tự và lúc đầu nó hoạt động. Tôi vá 'ngẫu nhiên' và' haskell98' và các dự án mà tôi hiện đang làm việc tốt. Tôi quyết định thực hiện kiểm tra tốt hơn rằng tất cả đều tốt bằng cách cài đặt 'cabal' vào' hlint', 'hoogle',' darcs', 'HDBC-mysql',' xác thực', 'hakyll' và lặp lại quá trình xác minh rằng tôi một điểm cố định.Cuối cùng, có một vấn đề với hầu hết các gói đơn lẻ đi kèm với trình cài đặt GHC trong Nền tảng Haskell .. nỗ lực tiếp theo của tôi là vô hiệu hóa tùy chọn 'user-install' của cabal. – yairchu

+0

một vài lần lặp lại các nỗ lực xung quanh công việc sau, tôi nghĩ rằng thiết lập của tôi cuối cùng cũng hoạt động! Tôi mô tả công việc của tôi xung quanh trong câu trả lời của tôi dưới đây. Cảm ơn! – yairchu

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