Domanda

Con una nuova installazione della "Piattaforma Haskell". (OS X Snow Leopard-& Platform 2010.1.0.1), facendo questo provoca semplice sequenza provoca un comportamento molto strano cabal install:

$ 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 è installato due volte nel mio sistema. e ora sta facendo reinstalla cabal install random random-1.0.0.2 ogni volta.

appare come random dipende time, e cabala vuole reinstallarlo dopo c'è una nuova versione di time disponibili? E a causa di due cabala random-1.0.0.2 è confuso e pensa sempre che non è aggiornato perché è guardando il primo?

ghc-pkg check non trova errori.

È stato utile?

Soluzione 3

io descrivere il work-around che ha funzionato così lontano per me. Ho provato molte cose diverse, ma io descritto qui solo il tentativo che ha funzionato.

(BTW: sto usando Mac OS X 10.6.4 e i risultati potrebbero essere diversi su sistemi diversi)

  • I installato GHC 6.12.3 dai sorgenti. Non rimuovere il tuo GHC precedente come la costruzione di GHC lo richiede.
  • Ho rimosso il link simbolici a /usr/bin (per ghc, ghci, ghc-pkg, e runhaskell) al mio GHC precedente, che era quello della 2010.1.0.1 installazione Haskell Platform.
  • I installato cabal-install usarlo script bootstrap.sh.
  • ho installato le versioni rattoppate dei pacchetti random e haskell98. Le differenze sono solo nella loro file .cabal
    • La versione di random urtato fino a 1.0.0.2.1 e lo cambiò dipendenza time essere time == 1.1.*
    • versioni di haskell98 urtato fino a 1.0.1.1.1 e il gioco è fatto
  • I corse cabal update e cabal upgrade per vedere quali pacchetti non sono aggiornati. Ho fatto cabal install quelli. Credo che questo aiuta raggiungere una stalla-stato più veloce. (Nota di quel syb Impossibile installare e che cabal install parsec detto che non c'è niente da fare a questo proposito quando cabal upgrade ha detto in modo diverso. Così ho lasciato quei due pacchetti da solo)

I convalidato che la mia messa a punto è ok eseguendo ghc-pkg check tra gli stadi. A volte si rompe a causa di un pacchetto viene reinstallato su una versione precedente con lo stesso numero di versione e pacchetti che dipendeva su di esso devono essere reinstallati. Quando ciò accade ho cabal install nuovamente i pacchetti rotti.

ho usato anche il seguente programma per verificare che la mia messa a punto non contiene due pacchetti con la stessa versione:

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
  • I cabal installed hlint, yesod, haddock, HDBC-mysql, hakyll e altri pacchetti e poi ho cabal installed nuovo e di nuovo l'elenco precedente fino mio setup raggiunto uno "stato stabile" in cui cabal install non reinstalla una di queste.

  • I ha verificato che i miei programmi su cui sto lavorando ora compilare e lavorare. Tutto sembra andare bene ora

Note:

  • non ho potuto ottenere Haskell Platform 2010.1.0.1 al lavoro. Le cose hanno lavorato solo per me dopo che ho aggiornato a GHC 6.12.3. (?) Ironicamente, questo va contro la raccomandazione sulla pagina di download di GHC:
  

Arresto!

     

Per la maggior parte degli utenti, si consiglia di installare la piattaforma Haskell al posto di GHC. L'attuale versione Haskell Platform include una versione recente GHC così come alcuni altri strumenti (come la cabala), e un maggior numero di librerie che sono noti per lavorare insieme.

  • Questo work-around probabilmente romperà in futuro pure. Credo che questo sarà probabilmente accadrà nel giro di pochi mesi. Una libreria di base come random viene aggiornata e quindi problemi con le dipendenze inizierà a svelare ancora una volta. Poi ti / vi dovrò passare il tempo su come ottenere le nostre configurazioni fisse. Forse allora sarebbe necessario l'aggiornamento a una versione più recente GHC. Ma chissà, forse allora sarà una versione più vecchia che diventerà stabile come pacchetti hackage vengono aggiornati per risolvere i problemi connessi con le dipendenze. Come un servizio a voi, aggiornerò questo botta e risposta, quando sarà il momento. (Supponendo che gli altri stanno avendo anche questo problema. Finora ho convalidato che Simon Marlow e Peaker faccia anche questo problema)

  • Modi per sapere che la configurazione Haskell è rotto (se uno di questi è vero allora l'installazione è rotto):

    • Niente funziona
    • ghc-pkg check dice che è rotto
    • Il programma corto la cui fonte ho messo in questa risposta sopra reperti you hanno un pacchetto installato due volte con la stessa identica versione
    • cabal update e ciclo poi cabal installing la lista dei pacchetti che ho scritto sopra, o un altro elenco (preferibilmente un grande con un sacco di dipendenze). Se non raggiungono mai una stalla-stato (un'iterazione del ciclo reinstalla sempre qualcosa) allora l'impostazione è rotto. ATTENZIONE : Questo passaggio può distruggere la vostra configurazione Haskell attualmente funzionante. Fate questo se siete maso-curiosi o disposti a correggere l'impostazione dopo si rompe (un processo che potrebbe richiedere molto tempo)
  • Vorrei sapere se i setup sono rotti o di lavoro. Questo mi potrebbe aiutare. Per esempio, se troviamo che GHC 6.10 messe a punto stanno lavorando bene, I / U potrei consigliare quelle messe a punto per le persone in occasione di raccomandare a qualcuno di provare Haskell, ecc.

Spero che questo aiuta gli altri che affrontano gli stessi o simili problemi. Molte grazie a Simon Marlow e John!

Altri suggerimenti

Si prega di fare

ghc-pkg check

e se che mostra nessun errore, vediamo l'uscita dal

ghc-pkg list -v

e

cabal install random -v

Modifica : posso riprodurre il problema con GHC 6.12.1, ma non con 6.12.2, utilizzando esattamente la stessa versione di cabala-installare (0.8.0). Cercherò in esso.

Modifica 2 : segnalato come un bug in cabala-installazione.

Ho due soluzioni possibili, che sono entrambi un po 'pericoloso, ma dovrebbe farti un'installazione di lavoro. Sono contento di Simon seguendo questo perché suona come una sorta di bug per me. Per ottenere un'installazione funzionante, vorrei provare il seguente prima:

ghc-pkg unregister random

poi fare la lista GHC-pkg casuale per vedere ciò che è installato. Direi (ma non sono sicuro) che avrai ancora la versione / Library / Frameworks (dalla piattaforma), ma la versione appena installato sarà andato. Se questo è il caso, procedere al passaggio successivo. Se non è probabilmente avrete bisogno di fare una reinstallazione pulita della piattaforma.

Supponendo che la piattaforma casuale è ancora presente, fare questo:

cabal unpack random

cd alla directory è decompresso in, e modificare il file .cabal urtando la versione a 1.0.0.2.1 (aggiungere un altro campo e incrementarlo per uno). Poi Cabal installare da quella directory e dovrebbe installare il nuovo casuale. Dal momento che questa ha una versione diversa rispetto alla piattaforma a caso, i due possono tranquillamente coesistere.

Piuttosto che fare l'unregister GHC-pkg, è possibile eliminare direttamente il file di registrazione da

  

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

il nome del file avrà un hash allegato ad esso, quindi avrai bisogno di guardare il contenuto della directory per effettivamente ottenere il valore. Basta eliminare il file e GHC-pkg e cabala non dovrebbero vederlo da allora in poi. Questo non toccare l'installazione della piattaforma (quindi è più sicuro in questo senso), ma il potenziale è ancora lì a tubo flessibile di altri pacchetti installati. Dopo questo, è possibile reinstallare il pacchetto casuale dal disimballaggio e incrementando la versione come sopra.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top