haskell - instalar - ¿Hay alguna forma de definir banderas para dependencias de la camarilla?
instalar cabal (5)
Hace poco me encontré con un "infierno de Cabal"
Esto no es "infierno de la camarilla".
Con una instalación de cabal
moderna, puedes poner
constraints: hmatrix +openblas
en su archivo cabal.project.local
o cabal.project
. Esto evita la pila.
¿Hay alguna forma de indicar en el archivo .cabal de mi aplicación que dependo de una biblioteca para que se compile con el indicador de compilación específico?
No, pero en su caso, esto no es realmente un problema en el solucionador y es más bien un error poco informativo (causado por el uso poco inteligente de las banderas).
Recientemente me encontré con un problema de "cabal hell" que solo pude resolver mediante la instalación manual de transformers-compat
con la -f transformers3
en mi caja de arena de Cabal antes de ejecutar cabal install
para mi proyecto.
¿Hay alguna forma de indicar en el archivo .cabal
mi aplicación que dependo de una biblioteca para que se compile con el indicador de compilación específico?
Hay un par de formas para restringir la versión para la instalación.
Agregue límites inferiores y superiores a las versiones del paquete en el archivo cabal como Mikhail mencionado anteriormente, ejemplo de tal archivo aquí
Además, puede anular la configuración en el archivo .cabal con la
cabal install --constraint="bar-2.1"
la banderacabal install --constraint="bar-2.1"
Para eliminar una versión específica de un paquete:
- En un sandbox, puede anular el registro de una versión con
cabal sandbox hc-pkg unregister bar-2.1
- El registro global se puede hacer con este comando fuera de sandbox
ghc-pkg unregister bar-2.1
También luché durante mucho tiempo para encontrar una solución a este problema. ¡Acabo de encontrar uno! Debe modificar el archivo de configuración global cabal en ~ / .cabal / config. Agregue una línea como esta a la sección inicial del archivo:
Restricciones: hmatrix + openblas
Esto habilita el indicador de openblas para el paquete hmatrix. Se utilizará automáticamente la próxima vez que se instale el paquete. Si hay una manera de establecer una marca local para un arenero, no podría encontrarla.
[Copiado de la sección de comentarios.]
Parece que no es posible especificar una dependencia de este tipo a través del campo de build-depends
en su archivo .cabal
. buildDepends
se define como [Dependency]
, donde data Dependency = Dependency PackageName VersionRange
. Sin embargo, puede usar cabal install --constraint="transformers-compat +transformers3"
.
Mirando el archivo transformers-compat.cabal
, creo que el solucionador debería poder determinar la asignación de bandera correcta si limita su dependencia de los transformers
apropiada. Por ejemplo, build-depends: transformers >= 0.3 && < 0.4
debe obligar al solucionador a elegir transformers-compat +transformers3
. Si esto no funciona, puede ser un error en el solucionador.
Aparte: llamar a cualquier tipo de problema técnico con Cabal "Cabal hell" no es muy informativo. Sería más fácil ayudarlo si describiera qué mensaje de error estaba recibiendo.