2017-09-08 6 views
0

J'essaye de construire mon paquet en utilisant un bac à sable. Sans cela, il compile et fonctionne comme un charme. Une fois que j'introduis un sandbox, Cabal dit qu'il ne peut pas résoudre les dépendances. À mes yeux, ces conflits ne ressemblent pas à des conflits.cabal sandbox hell: impossible de résoudre les depdencies

La structure du projet est la suivante:

application (depends on library-base, library-impl1 and library-impl2) 

library 
├ library-base 
├ library-impl1 (depends on library-base) 
└ library-impl2 (depends on library-base) 

Ce sont les commandes que je courais dans cet ordre

rm -rf ~/.cabal 
rm -rf ~/.ghc 
cabal update 
rm -f cabal.sandbox.config 
rm -rf .cabal-sandbox 
cabal sandbox init 
cabal sandbox add-source $LIB_HOME/library-base 
cabal sandbox add-source $LIB_HOME/library-impl1 
cabal sandbox add-source $LIB_HOME/library-impl2 
cabal install --only-dependencies --force-reinstalls && cabal build 

cabal install --only-dependencies --force-reinstalls produit la sortie suivante:

Resolving dependencies... 
cabal: Could not resolve dependencies: 
next goal: lens (dependency of library-base-0.1.0.0) 
rejecting: lens-4.15.4/installed-I5C... (conflict: bifunctors==5.4.2, lens => 
bifunctors==5.4.2/installed-Hs7...) 
trying: lens-4.15.4 
trying: unordered-containers-0.2.8.0/installed-1tq... (dependency of 
lens-4.15.4) 
next goal: text (dependency of lens-4.15.4) 
rejecting: text-1.2.2.2/installed-3EN... (conflict: binary==0.8.5.1, text => 
binary==0.8.3.0/installed-0.8...) 
trying: text-1.2.2.2 
next goal: hashable (dependency of lens-4.15.4) 
rejecting: hashable-1.2.6.1/installed-2nP... (conflict: text==1.2.2.2, 
hashable => text==1.2.2.2/installed-3EN...) 
rejecting: hashable-1.2.6.1, hashable-1.2.6.0, hashable-1.2.5.0, 
hashable-1.2.4.0, hashable-1.2.3.3, hashable-1.2.3.2, hashable-1.2.3.1, 
hashable-1.2.3.0, hashable-1.2.2.0, hashable-1.2.1.0, hashable-1.2.0.10, 
hashable-1.2.0.9, hashable-1.2.0.8, hashable-1.2.0.7, hashable-1.2.0.6, 
hashable-1.2.0.5, hashable-1.2.0.4, hashable-1.2.0.3, hashable-1.2.0.2, 
hashable-1.2.0.1, hashable-1.2.0.0, hashable-1.1.2.5, hashable-1.1.2.4, 
hashable-1.1.2.3, hashable-1.1.2.2, hashable-1.1.2.1, hashable-1.1.2.0, 
hashable-1.1.1.0, hashable-1.1.0.0, hashable-1.0.1.1, hashable-1.0.1.0, 
hashable-1.0.0 (conflict: unordered-containers => 
hashable==1.2.6.1/installed-2nP...) 
Dependency tree exhaustively searched. 

Quelqu'un at-il une idée de ce qui se passe ici?

+1

Autre suggestion: Essayez la pile. – Sibi

Répondre

3

D'abord, je vais donner une explication de ce que le message d'erreur dit. Ensuite, je vais essayer de faire quelques suppositions sur pourquoi vous avez l'erreur. Ensuite, je vais proposer quelques étapes suivantes.

L'erreur dit:

  1. Peut-être que la version 4.15.4 de la lentille fonctionnera.
  2. Peut-être que la version installée 0.2.8.0 de conteneurs non ordonnés satisfera la dépendance de l'objectif sur les conteneurs non ordonnés.
  3. Peut-être que la version 1.2.2.2 du texte satisfera la dépendance de l'objectif par rapport au texte.
  4. Merde. Vous avez demandé la version 0.8.5.1 de binary, mais la version installée du texte a été créée par rapport à la version 0.8.3.0. Je dois reconstruire le texte.
  5. Peut-être que la version installée de 1.2.6.1 de hashable satisfera la dépendance de l'objectif sur le hashable.
  6. Merde. Nous reconstruisons du texte, une dépendance de hashable. Je dois reconstruire lavable.
  7. Double merde. Nous nous sommes déjà engagés à utiliser la version installée des conteneurs non-ordonnés, qui dépend de la version installée de hashable, ce qui nous empêche de reconstruire les fichiers lavables.
  8. (... et j'ai essayé un tas d'autres choses qui ne fonctionne pas, aussi, mais je ne vous dis pas ce que, Nya Nya Nya)

Normalement les sandbox ignorent les bases de données de paquet locales, afin cela me suggère que là où il est question de "versions installées" ci-dessus, c'est soit en les récupérant de votre base de données de paquets globale ou de votre sandbox existant. Vous prétendez que vous venez de créer ce sandbox et exécutez cette commande cabal install immédiatement. Si cela est vrai (est-ce? Ou est-ce une seconde exécution de l'outil? Pourquoi avez-vous --force-reinstalls?), Il ne peut pas choisir les versions installées de votre sandbox, et doit donc les récupérer à partir de votre base de données globale. L'installation d'éléments dans la base de données de packages globale est généralement considérée comme une mauvaise idée, car il est beaucoup plus difficile d'effacer correctement une base de données de packages globale encombrée/interrompue. Prenez-le sous futur conseil.

Maintenant, pour faire des progrès, je voudrais essayer une de ces deux choses:

  1. La seule partie de l'explication d'erreur ci-dessus que vous avez le contrôle est le « Vous avez demandé pour la version 0.8.5.1 de binaire " partie.Envisagez de relâcher vos contraintes de version sur binary pour accepter la version 0.8.3.0 déjà installée.
  2. Vous pouvez souvent obtenir de meilleurs messages d'erreur hors de la cabale en réduisant son espace de recherche; parce qu'il imprime seulement une partie de l'espace de recherche dans son erreur, vous avez parfois besoin de le guider vers la partie problématique de l'espace afin qu'il vous montre le vrai problème dans son erreur. Si vous êtes assez sûr que les versions installées de désordonnées-conteneurs et autres sont un bon match pour votre bibliothèque, pensez

    cabal install --only-dependencies --constraint 'unordered-containers installed' --constraint 'binary installed' 
    

    et ainsi de suite pour tous les autres paquets, il mentionne en essayant de reconstruire que vous ne voulez pas reconstruire. Alternativement, vous pouvez mettre des contraintes de version exactes dans le --constraint si vous ne voulez pas l'une des versions installées. N'incluez pas --force-reinstalls, fondamentalement jamais.

+0

J'ai mis à jour la question avec les commandes exactes que j'ai courues. –

+0

@BlankChisui Étant donné que, en effet, il semble que vous avez installé un certain nombre de paquets dans votre base de données de paquets globale. Honte, honte, honte! ;-) –

+0

wtf, je viens de nuked mon répertoire '~/.cabal' et' ~/.ghc' et j'obtiens toujours des paquets installés? –