39 votos

La fijación de cuestiones observadas por ghc-pkg de verificación

Es bastante agradable que ghc-pkg check mostrará una lista de los paquetes rotos, y por qué se rompen. Pero que yo sepa, no hay ninguna manera automatizada para cuidar de los paquetes rotos. ¿Cuál es la forma recomendada para lidiar con paquetes rotos? (De preferencia que no sea reinstalar GHC)

30voto

Daniel Fischer Puntos 114146

Con suerte, usted ha sido lo suficientemente sabio como para no romper en el mundial paquete de base de datos. La rotura puede fácilmente significar una reinstalación de GHC es necesario. Así, supongamos que la rotura está restringido para el usuario paquete db (a excepción, posiblemente, de un paquete o dos en el global a la sombra de paquetes de usuario). Si sólo algunos paquetes están rotos, usted puede fijar su instalación por la anulación del registro de los infractores de los paquetes,

$ ghc-pkg unregister --user borken

de que se quejan a menudo de que la anulación del registro de borken va a romper otros paquetes. Si intenta anular el registro de aquellos primeros o anular el registro de borken inmediatamente con --force y de acuerdo con el nuevo partido después es sobre todo una cuestión de elección. Asegúrese de que sólo anular el registro de paquetes de la base de datos de usuario. Si las cosas no están demasiado sombrío, después de la anulación del registro de un puñado de paquetes, ghc-pkg check le informe de no más paquetes rotos.
Si, por otro lado, una gran proporción de los paquetes está roto, probablemente será más fácil de limpiar completamente la base de datos de usuario, $ rm -rf ~/.ghc/ghc-version/package.conf.d o el equivalente en otros sistemas operativos.

De cualquier manera, se han perdido paquetes usted todavía desea utilizar, así que trate de volver a instalar sin romper nada nuevo. Ejecutar

$ cabal install world --dry-run

que va a tratar para producir un coherente plan para instalar todos los paquetes instalados con cabal-install. Si no lo hace, va a imprimir las razones, entonces usted puede ser capaz de solucionar los problemas mediante la adición de restricciones a los paquetes listados en el mundo de archivo (~/.cabal/world) - por ejemplo, aunque yo no tengo ninguna paquetes rotos (según el ghc/ghc-pkg), cabal install world --dry-run me dijo que no podía configurar vector-algorithms-0.5.2, que depende de la vector >= 0.6 && < 0.8 (He vector-0.7.1 instalado). La razón es que hmatrix-0.12.0.1 requiere vector >= 0.8. Sustitución de la -any "restricción" en hmatrix por un "< 0.12" en el mundo de archivo producido una instalación limpia del plan.
Así que, después de un poco de trasteo con restricciones en el mundo de archivo, usted recibirá una instalación plan de cábala. Compruebe si que reinstalar todos los paquetes que ya tienen (instalar una versión más reciente es probablemente correcto, volver a instalar la misma versión significa problemas). Si estás feliz con la cábala instalar-plan, cabal install world y preparar una buena taza de té mientras GHC está ocupado. Ejecutar ghc-pkg check una vez más, para comprobar que todo está en orden.

Una pieza de un buen consejo: Si usted no sabe lo que la instalación de un paquete implica, siempre uso --dry-run primera.

Si usted rompió el global de la base de datos de paquetes haciendo global se instala con la cábala, la estrategia de eliminación del registro de delincuentes puede funcionar, pero también puede irrevocablemente romper su ghc, que depende de lo que está roto en el cual manera. Si usted rompió su db global mediante la instalación de paquetes de tu sistema operativo distro, instalar un nuevo GHC, la maldición de la distro-empaquetadores, y tratar de ayudar a prevenir tales eventos.

Un cabal repair comando sería muy bonito, pero por el momento, la reparación de una fractura de la instalación es, por desgracia, mucho más trabajo.

15voto

Simon Michael Puntos 1577

Durante algún tiempo he invocado este ghc-pkg-limpiar la secuencia de comandos. Elimina todos los paquetes rotos y puedo volver a instalar si es necesario. Para obtener más serio a la rotura, yo uso el ghc-pkg-reset de secuencia de comandos.

Hoy, sin embargo, he encontrado ghc-pkg-corrección automática, que automatiza este más - paquetes rotos convertido ininterrumpida. No sé qué hace, YMMV.

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X