¿Hay alguna manera de definir indicadores para las dependencias de cabal?
Recientemente me encontré con un problema de "infierno cabal" que solo logré resolver instalando manualmentetransformers-compat
con la bandera -f transformers3
en mi entorno de pruebas cabal antes de ejecutar cabal install
para mi proyecto.
¿Hay alguna forma de indicar en el archivo .cabal
de mi aplicación que dependo de una biblioteca para que esté construida con el indicador de compilación específico?
5 answers
La forma moderna de hacer esto es usar Stack. Edite su stack.yaml
para incluir
flags:
transformers-compat:
transformers3: true
Véase también la sección sobre banderas.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-02-01 06:01:54
[Copiado de la sección de comentarios.]
Parece que no es posible especificar tal dependencia a través del campo build-depends
en su archivo .cabal
. buildDepends
se define como [Dependency]
, donde data Dependency = Dependency PackageName VersionRange
. Sin embargo, puedes usar cabal install --constraint="transformers-compat +transformers3"
.
Mirando el archivo transformers-compat.cabal
, creo que el solucionador debería ser capaz de averiguar la asignación de bandera correcta si limita su dependencia de transformers
apropiadamente. Por ejemplo, build-depends: transformers >= 0.3 && < 0.4
debería forzar al solucionador a elegir transformers-compat +transformers3
. Si esto no funciona, puede ser un error en el solver.
Aparte: llamar a cualquier tipo de problema técnico con la Cábala "infierno de la Cábala" no es muy informativo. Sería más fácil ayudarlo si describiera qué mensaje de error estaba recibiendo.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-10-21 15:53:35
También luché durante mucho tiempo para encontrar una solución a este problema. Acabo de encontrar uno! Tienes que modificar el archivo de configuración de cabal global en~/.cabal / config. Agregue una línea como esta a la sección inicial del archivo:
Restricciones: hmatrix + openblas
Esto habilita el indicador openblas para el paquete hmatrix. Se utilizará automáticamente la próxima vez que se instale el paquete. Si hay una manera de establecer tal bandera localmente para un sandbox, no pude encontrar se.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-01-29 20:21:47
Recientemente me encontré con un problema de" infierno de la cábala "
Esto no es "el infierno de la cábala."
Con una instalación moderna cabal
, puede poner
constraints: hmatrix +openblas
En su archivo cabal.project.local
o cabal.project
. Esto evita la pila.
Hay alguna manera de indicar en mi solicitud .archivo cabal que dependo de una biblioteca para que se construya con la bandera de compilación específica?
No, pero en su caso esto no es realmente un problema en el solucionador y es más bien y poco informativo error (causado por los usos menos que juiciosos de las banderas de alguien).
Hay un par de maneras de restringir la versión para la instalación.
Agregue límites inferiores y superiores a las versiones de paquetes 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 bandera
cabal 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
- La anulación del registro global se puede hacer con este comando fuera de sandbox
ghc-pkg unregister bar-2.1
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 10:29:27