misteriosa cabala-installazione problemi
-
30-09-2019 - |
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.
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
(perghc
,ghci
,ghc-pkg
, erunhaskell
) al mio GHC precedente, che era quello della 2010.1.0.1 installazione Haskell Platform. - I installato
cabal-install
usarlo scriptbootstrap.sh
. - ho installato le versioni rattoppate dei pacchetti
random
ehaskell98
. Le differenze sono solo nella loro file.cabal
- La versione di
random
urtato fino a1.0.0.2.1
e lo cambiò dipendenzatime
esseretime == 1.1.*
- versioni di
haskell98
urtato fino a1.0.1.1.1
e il gioco è fatto
- La versione di
- I corse
cabal update
ecabal upgrade
per vedere quali pacchetti non sono aggiornati. Ho fattocabal install
quelli. Credo che questo aiuta raggiungere una stalla-stato più veloce. (Nota di quelsyb
Impossibile installare e checabal install parsec
detto che non c'è niente da fare a questo proposito quandocabal 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 install
edhlint
,yesod
,haddock
,HDBC-mysql
,hakyll
e altri pacchetti e poi hocabal install
ed nuovo e di nuovo l'elenco precedente fino mio setup raggiunto uno "stato stabile" in cuicabal 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 poicabal install
ing 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.