mystérieuse cabale des problèmes d'installation
-
30-09-2019 - |
Question
Avec une installation propre de la « plate-forme Haskell ». (OS X Snow Leopard et plate-forme 2010.1.0.1), cette opération provoque simple séquence provoque un comportement de cabal install
très étrange:
$ 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
est installé deux fois dans mon système. et en ce moment réinstalle de cabal install random
random-1.0.0.2
chaque fois.
On dirait random
dépend time
et cabale veut réinstaller après il y a une nouvelle version de time
disponible? Et à cause de deux cabale random-1.0.0.2
est confus et pense toujours qu'il est pas à jour parce qu'il regarde le premier?
ghc-pkg check
ne trouve aucune erreur.
La solution 3
Je vais décrire le travail autour qui a travaillé jusqu'à présent pour moi. J'ai essayé beaucoup de choses différentes, mais je ne décrit ici la tentative qui a fonctionné.
(BTW: J'utilise Mac OS X 10.6.4 et vos résultats peuvent être différents sur différents systèmes)
- I installé 6.12.3 GHC de la source. Ne retirez pas votre GHC précédent comme la construction GHC exige.
- Je retire les liens symboliques à
/usr/bin
(pourghc
,ghci
,ghc-pkg
etrunhaskell
) à mon précédent GHC qui était celui de la plate-forme d'installation Haskell 2010.1.0.1. - J'ai installé
cabal-install
en utilisant son scriptbootstrap.sh
. - J'ai installé des versions corrigées des paquets
random
ethaskell98
. Les différences ne sont que dans leurs fichiers.cabal
- la version
random
jusqu'à endommager1.0.0.2.1
et a changé la dépendance à l'time
êtretime == 1.1.*
- Les versions de
haskell98
jusqu'à endommager à1.0.1.1.1
et c'est tout
- la version
- J'ai couru
cabal update
etcabal upgrade
pour voir quels paquets sont périmés. Je necabal install
ceux-ci. Je crois que cela aide à atteindre un état stable plus rapide. (Notez que de lasyb
installation a échoué et quecabal install parsec
a dit qu'il n'y a rien à faire quandcabal upgrade
dit différemment. Je suis donc parti de ces deux paquets seul)
Je validé que ma configuration est ok en exécutant ghc-pkg check
entre les étapes. Parfois, il se casse parce qu'un paquet est réinstallé sur une version précédente avec le même numéro de version et paquets qui en dépendait besoin d'être réinstallées. Lorsque cela se produit, je cabal install
les paquets cassés à nouveau.
J'ai aussi utilisé le programme suivant pour vérifier que ma configuration ne contient pas deux paquets avec la même version:
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
-
Je
cabal install
edhlint
,yesod
,haddock
,HDBC-mysql
,hakyll
et autres paquets, puis jecabal install
ed la liste précédente encore et encore jusqu'à ce que ma configuration a atteint un « état stable » dans lequelcabal install
ne réinstalle pas de ceux-ci. -
J'ai vérifié que mes propres programmes, je travaille sur la compilation maintenant et le travail. Tout semble bien maintenant
Notes:
- Je ne pouvais pas Haskell plate-forme 2010.1.0.1 au travail. Les choses ne travaillaient pour moi après je suis passé à GHC 6.12.3. (?) Ironie du sort, cela va à l'encontre de la recommandation sur la page de téléchargement de GHC:
Stop!
Pour la plupart des utilisateurs, nous vous recommandons d'installer la plate-forme Haskell au lieu de GHC. La version actuelle Haskell plate-forme comprend une version récente de GHC, ainsi que d'autres outils (comme la cabale), et un ensemble de plus grandes bibliothèques qui sont connus pour travailler ensemble.
-
Ce travail autour cassera probablement dans l'avenir aussi bien. Je suppose que cela se produira probablement dans quelques mois. Une bibliothèque de base comme
random
sera mise à jour et les problèmes de dépendance commencera à nouveau désagréger. Alors, je vais / vous devrez passer du temps à obtenir nos installations fixes. Peut-être faudrait alors mettre à jour un GHC plus récent. Mais qui sait, peut-être alors ce sera un plus communiqué qui deviendra stable paquets hackage sont mis à jour pour résoudre les problèmes liés à la dépendance. En tant que service pour vous, je mettrai à jour cette question et répondre à quand vient le temps. (En supposant que les autres ont de ce problème aussi. Jusqu'à présent, je validais que le visage Simon Marlow et Peaker ce problème aussi) -
façons de savoir que votre configuration Haskell est cassé (si l'un de ceux-ci est vrai, alors la configuration est cassée):
- Rien ne fonctionne
-
ghc-pkg check
dit qu'il est cassé - Le programme court dont la source que je mets dans cette réponse ci-dessus trouve que you ont un paquet installé deux fois avec la même version exacte
-
cabal update
et le cycle puiscabal install
ing la liste des paquets que j'ai écrit ci-dessus, ou une autre liste (de préférence un grand avec beaucoup de dépendances). Si vous n'atteint un état stable (une itération du cycle réinstalle toujours quelque chose), votre installation est cassée. AVERTISSEMENT : Cette étape peut détruire votre configuration Haskell qui fonctionne actuellement. Pour ce faire, si vous êtes curieux ou Maso prêt à corriger votre configuration après casse (un processus qui pourrait prendre beaucoup de temps)
-
Je voudrais savoir si vos configurations sont cassés ou de travail. Cela pourrait me aider. Par exemple, si nous constatons que GHC 6.10 configurations fonctionnent très bien, je / U pourrait recommander ces installations pour les personnes à l'occasion de recommander à quelqu'un d'essayer Haskell etc.
J'espère que cela aide les autres face à des problèmes identiques ou similaires. Un grand merci à Simon Marlow et John!
Autres conseils
S'il vous plaît faire
ghc-pkg check
et si cela ne montre aucune erreur, nous allons voir la sortie de
ghc-pkg list -v
et
cabal install random -v
Modifier : Je peux reproduire votre problème avec GHC 6.12.1, mais pas avec 6.12.2, en utilisant exactement la même version de cabale-INSTALL (0.8.0). Je vais examiner.
Edit 2 : signalé comme un bug dans la cabale installer.
J'ai deux solutions possibles, toutes deux sont un peu dangereux, mais vous devriez une installation de travail. Je suis heureux de Simon suivant parce que cela ressemble à une sorte de bug pour moi. Pour obtenir une installation de travail, je voudrais essayer d'abord les éléments suivants:
ghc-pkg unregister random
puis faire la liste GHC-pkg aléatoire pour voir ce qui est installé. Je suppose (mais je ne suis pas sûr) que vous aurez encore la version / Bibliothèque / Frameworks (à partir de la plate-forme), mais la nouvelle version installée sera parti. Si tel est le cas, passez à l'étape suivante. Si ce n'est pas vous devrez probablement faire une réinstallation propre de la plate-forme.
En supposant que la plate-forme aléatoire est toujours présent, faites ceci:
cabal unpack random
cd dans le répertoire, il est décompressé dans, et modifier le fichier .cabal en se cognant la version à 1.0.0.2.1 (ajouter un autre champ et incrémentons). Ensuite Cabal installer à partir de ce répertoire et il doit installer le nouveau aléatoire. Comme il a une version différente de la plate-forme aléatoire, les deux peuvent coexister en toute sécurité.
Plutôt que de faire la désinscription GHC-pkg, vous pouvez directement supprimer le fichier d'enregistrement de
/Users/yairc/.ghc/i386-darwin-6.12.1/package.conf.d
le nom du fichier aura un hachage ajouté à elle, vous aurez donc besoin de regarder le contenu du répertoire pour obtenir réellement la valeur. Il suffit de supprimer le fichier et GHC-pkg et cabale ne devrait pas le voir à partir de là. Cela ne touchera pas l'installation de la plate-forme (il est donc plus sûr en ce sens), mais le potentiel est toujours là pour d'autres paquets installés Arroser. Après cela, vous pouvez réinstaller le paquet au hasard par le déballage et incrémenter la version comme ci-dessus.