2011-03-21 17 views
13

Por lo tanto, este es un problema personal, pero tal vez la gente tenga buenos consejos o soluciones.cabal-install y Debian

El problema consiste en instalar cabal-install y haskell-platform en Debian.

Cuando apt-get install haskell-platform, se envía con cabal-install, y su comando cabal está disponible.

Ahora bien, este cabal-install no es hasta a la fecha:

> which cabal 
/usr/bin/cabal 
> /usr/bin/cabal --version 
cabal-install version 0.8.0 
using version 1.8.0.2 of the Cabal library 

Pero, mi comprensión del funcionamiento cabal update es que se actualiza Cabal, pero ya que no es un "Debian cosita", que pone en ~/.cabal/bin/.

> ~/.cabal/bin/cabal --version 
cabal-install version 0.8.2 
using version 1.8.0.2 of the Cabal library 

Ahora mi sistema tiene 2 cábalas, y el recibo escribiendo cabal no es el que yo quiero usar ... Debido a que va a mantener la actualización de la otra vez de sí mismo, y por lo tanto es ineficaz .

Así que lo que hice fue un alias en mi ~/.bashrc:

alias cabal='~/.cabal/bin/cabal' 

Ahora:

> cabal --version 
cabal-install version 0.8.2 
using version 1.8.0.2 of the Cabal library 

preguntas lo tanto, mis finales:

  • ¿Hay un repositorio deb que mantiene cabal 0.8.2?
  • ¿Podría mi solución actual generar problemas? (Por ejemplo, which cabal aún apunta a mi inútil /usr/bin/cabal, por lo que si las secuencias de comandos utilizan este comando se dejarán engañar ...)
  • ¿Alguien ha encontrado una solución mejor? (El mío es un poco ad-hoc pero eso es todo lo que pude hacer con mi conocimiento de lo que está sucediendo detrás de escena ...)
  • Corrígeme si algo de lo que dije arriba es incorrecto o impreciso.
+1

+1. No entiendo por qué Haskell necesita su propio administrador de paquetes, mientras que otros idiomas funcionan sin uno. – harpo

+5

Muchos idiomas tienen su propio administrador de paquetes? Por ejemplo, RubyGems es extremadamente popular en la comunidad de Ruby. – dbyrne

+0

gema para ruby, pip o easy_install para python, maven y sus derivados para Java, ... Para las personas que usan extensamente bibliotecas de terceros, confiar en el sistema de administración de paquetes del sistema operativo no siempre es la mejor opción. Especialmente en sistemas operativos conservadores como Debian. Debo estar al día con las últimas versiones de algunas bibliotecas en desarrollo (como cliente, no como desarrollador) y sería un infierno instalarlas manualmente cada vez. –

Respuesta

13

Lo que hago es instalar cabal con la bandera --global. Esto instalará a cabal en /usr/local/bin/cabal, por lo tanto siempre superará a los paquetes de Debian cabal.

Otra forma es generalmente evitar los paquetes Debian e instalar la plataforma Haskell directamente desde su origen. Este enfoque también es mejor, si siempre quieres tener las últimas versiones de las librerías Haskell.

+1

Esto es interesante. Entonces, lo que hice para que funcione es:> su> actualización de cabal> instalación cabal de cabal-install --global> exit> (aquí eliminé mi alias de mi .bashrc y volví a abrir la terminal) y ahora funciona bien. Gracias. – Ptival

11

Guardo mi usuario-local $HOME/.cabal/bin en el frente de PATH. Instalo solo ghc6, ghc6-prof, ghc6-doc y cabal-install en los paquetes de distribución. No utilizo la distribución cabal-install para nada más que arrancar el nuevo ~/.cabal. Todo lo demás lo instalo con cabal install, incluido el más reciente cabal.

Cuando quiero usar más reciente GHC, que desplegarlo en /usr/local/stow/ghcVERSION, y permitir que con GNU stow (que añade enlaces simbólicos en /usr/local que, de nuevo, tiene prioridad en mi PATH).Cuando quiero volver a la distribución GHC, simplemente ejecuto stow -D para eliminar todos los enlaces simbólicos a la misma.

Considero utilizar cabal-dev para tener instalaciones cabal específicas del proyecto, y evitar las dependencias rotas que ocurren con cabal de vez en cuando.

De hecho, no uso Haskell Platform en absoluto porque no lo necesito todo y me resulta más fácil poder instalar bibliotecas individuales. No instalo bibliotecas de distribución, porque no todas están disponibles o son exactamente las versiones que necesito; y es mucho más fácil controlar conflictos si todos están instalados en el mismo lugar (~/.cabal en mi caso). No instalo nada con --global, porque creo que es incorrecto y difícil de deshacer.

+0

Gracias, es interesante. Podría cambiar a esto si encuentro algún problema/molestia. – Ptival

1

En Ubuntu también tiendo a instalar GHC mediante Stow, ignorando por completo los paquetes del sistema.

Un pequeño giro del enfoque de jetxee es que instalo la plataforma Haskell (desde la fuente), colocándola con el directorio de almacenamiento de GHC. Supongo que debería llamar a las rutas /usr/local/stow/haskell-platform-VERSION, pero tiendo a usar /usr/local/stow/ghc-VERSION en su lugar.

4

Por supuesto, esta información no está actualizada, pero sí, Debian inestable y las pruebas tienen, en el momento de la escritura, cabal-install 0.10.2.

En general, el empaquetado de Debian de cosas Haskell está dirigido a usuarios que desean un conjunto de paquetes que se sabe trabajan en conjunto, es decir, no hay infierno de dependencia, a expensas de no siempre tener lo último y mejor. Esto incluye cabal-install. Utilizo la instalación de cabal de los repositorios, y solo para instalar las bibliotecas que aún no se han empaquetado para Debian.

Descargo de responsabilidad: soy uno de los tipos que crean esos paquetes para Debian.

+0

Es suficiente, entiendo que no puede satisfacer las necesidades de todos, y no hay alternativas tan tediosas. – Ptival

Cuestiones relacionadas