C'est plutôt sympa que ghc-pkg check
listera les paquets cassés, et pourquoi ils sont cassés. Mais pour autant que je sache, il n’existe aucun moyen automatisé de s’occuper de ces colis cassés. Quelle est la façon recommandée de traiter les colis cassés? (De préférence, ne réinstallez pas GHC)
Réponses
Trop de publicités?J'espère que vous avez été assez sage pour ne pas tout casser dans votre package de base de données. La rupture, on peut facilement dire une réinstallation de GHC est nécessaire. Donc, supposons que la casse est limitée à l'utilisateur package db (sauf peut-être un paquet ou deux mondial de l'ombre à l'utilisateur de paquets). Si seulement quelques paquets sont cassés, vous pouvez fixer votre installation par l'annulation de l'enregistrement de la délinquance des paquets,
$ ghc-pkg unregister --user borken
qui se plaignent souvent que l'annulation de l'inscription borken va casser d'autres paquets. Si vous essayez d'annuler l'inscription de ces premières ou annuler l'enregistrement de borken immédiatement avec de l' --force
et de traiter avec le nouveau brisé par la suite est surtout une question de choix. Assurez-vous que vous désinscrire des packages à partir de la base de données utilisateur. Si les choses ne sont pas trop graves, après l'annulation de l'inscription d'une poignée de paquets, ghc-pkg check
fera rapport, pas plus que des paquets cassés.
Si, d'autre part, une grande proportion de paquets est cassé, il sera probablement plus facile à nettoyer complètement la base de données utilisateur, $ rm -rf ~/.ghc/ghc-version/package.conf.d
ou l'équivalent sur d'autres systèmes d'exploitation.
De toute façon, vous aurez perdu des paquets que vous souhaitez utiliser, si vous essayez de réinstaller sans casser quoi que ce soit de nouveau. Exécuter
$ cabal install world --dry-run
qui va essayer de produire une cohérence d'installer un plan pour tous les paquets que vous avez installés avec cabal-install
. Si elle omet de le faire, il permet d'imprimer les raisons, vous pouvez être en mesure de résoudre les problèmes par l'ajout de contraintes pour les paquets listés dans le fichier de l'univers (~/.cabal/world
) - par exemple, bien que je n'ai pas de paquets cassés (selon ghc/ghc-pkg), cabal install world --dry-run
m'a dit qu'il n'a pas pu configurer vector-algorithms-0.5.2
, qui dépend de l' vector >= 0.6 && < 0.8
(J'ai vector-0.7.1
installé). La raison en est qu' hmatrix-0.12.0.1
exige vector >= 0.8
. Le remplacement de l' -any
"contrainte" sur hmatrix par un "< 0.12" dans le monde de fichiers a produit une clean install-plan.
Donc, après un peu de jongler avec les contraintes du monde du fichier, vous obtiendrez une installation plan de la cabale. Vérifiez si cela permettrait de réinstaller tous les paquets que vous avez déjà (si vous installez une version plus récente est probablement correct, de réinstaller la même version de la difficulté). Si vous êtes heureux avec la cabale installer-plan, cabal install world
et brasser une belle tasse de thé tout en GHC est occupé. Exécutez ghc-pkg check
, une fois de plus, pour vérifier que tout est en ordre.
Un morceau de généralement de bon conseil: Si vous ne savez pas ce que l'installation d'un paquet implique toujours utiliser l'option --dry-run premier.
Si vous avez cassé votre package de base de données mondiale s'installe avec cabale, la stratégie de l'annulation de l'enregistrement des délinquants peuvent travailler, mais il peut aussi irrévocablement casser votre ghc, qui dépend de ce qui est brisé et de quelle manière. Si vous avez cassé votre global db par l'installation de paquets de votre distribution du système d'exploitation, installer une nouvelle GHC, la malédiction de la distro-emballeurs, et essayer de les aider à prévenir de tels événements.
Un cabal repair
commande serait très gentil, mais pour le moment, la réparation d'une fracture de la configuration est malheureusement beaucoup plus de travail.
Pendant un certain temps, je me suis appuyé sur ce script ghc-pkg-clean . Il supprime tous les paquets cassés et je les réinstalle si nécessaire. Pour une casse plus grave, j'utilise le script ghc-pkg-reset .
Aujourd'hui, cependant, j'ai trouvé ghc-pkg-autofix , qui automatise cela plus loin - les paquets cassés deviennent ininterrompus. Je ne sais pas ce que ça fait, YMMV.