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.

Était-ce utile?

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 (pour ghc, ghci, ghc-pkg et runhaskell) à 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 script bootstrap.sh.
  • J'ai installé des versions corrigées des paquets random et haskell98. Les différences ne sont que dans leurs fichiers .cabal
    • la version random jusqu'à endommager 1.0.0.2.1 et a changé la dépendance à l'time être time == 1.1.*
    • Les versions de haskell98 jusqu'à endommager à 1.0.1.1.1 et c'est tout
  • J'ai couru cabal update et cabal upgrade pour voir quels paquets sont périmés. Je ne cabal install ceux-ci. Je crois que cela aide à atteindre un état stable plus rapide. (Notez que de la syb installation a échoué et que cabal install parsec a dit qu'il n'y a rien à faire quand cabal 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 installed hlint, yesod, haddock, HDBC-mysql, hakyll et autres paquets, puis je cabal installed la liste précédente encore et encore jusqu'à ce que ma configuration a atteint un « état stable » dans lequel cabal 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 puis cabal installing 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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top