how - Haskell cabal: acabo de instalar paquetes, pero ahora no se encuentran los paquetes
how to install haskell libraries (1)
Por aquí es la única razón por la que puedo encontrar que GHC no encuentra los paquetes que estoy instalando con Cabal:
Esto sucede cuando instala un paquete globalmente, y los paquetes anteriores se instalaron localmente. Tenga en cuenta que cabal-install se instala localmente por defecto [...]
Presumiblemente, "instalación local" significa poner paquetes en ~/.cabal/
. Primera pregunta: ¿ dónde están las instalaciones globales?
He estado ejecutando cabal
usando sudo
, así que supongo que es una instalación global. La razón por la que he estado haciendo esto es que se queja de los permisos cuando se ejecuta sin sudo
, por lo que esto contradice la afirmación "instalar de manera local la instalación local por defecto". Segunda pregunta: ¿cómo instalo localmente y cómo instalo globalmente?
Tratando de solucionar este problema, he estado usando aleatoriamente sudo ghc-pkg unregister
y quitando aleatoriamente cosas de ~/.cabal/
. En consecuencia, mi árbol de paquetes está roto, probablemente a nivel local y global. Tercera pregunta: ¿Cómo empiezo de nuevo?
Edición: estoy ejecutando Ubuntu 10.10. Instalé la plataforma Haskell 2011.
¿Estás usando Windows, OS X o alguna versión de Linux? ¿Estás utilizando la plataforma Haskell? ¿Has tenido una versión de ghc
o cabal
antes? Para una distribución de Linux, las sutilezas acerca de su administrador de paquetes pueden aparecer, por supuesto. (Las huellas de un antiguo ghc
en particular, y un antiguo directorio ~ / .ghc / pueden ser una fuente de problemas).
Aquí hay algunos pensamientos elementales del tipo que uno pasa por #haskell con tales problemas. (Mi comprensión no es completamente adecuada, por supuesto):
La pregunta principal parece ser: ¿Por qué te invitaron a hacer lo que deberían ser instalaciones locales con sudo
? Por supuesto, una instalación global ( cabal install pony --global
) requeriría privilegios si ghc y sus bibliotecas se encuentran en /usr/...
o en algún otro lugar protegido, pero de lo contrario, sudo
vs non- sudo
es independiente del lugar de instalación. Lo que haga con cabal install pony --user
( --user
es el predeterminado, en teoría) no debería requerir la autoridad de superusuario. (Algunas veces he encontrado en OS X que se solicitan privilegios donde se necesita llamar al gcc
, pero esto generalmente se debe a curiosidades acerca de mi configuración). Pero en cualquier caso, sudo
no afecta a dónde los está poniendo Cabal: lo implícito --user
y explícito --global
, y conjuros más específicos para el desarrollo, hacen eso.
Si haces la ghc-pkg list
, por ejemplo, dividirá los paquetes en los diferentes lugares en los que están registrados de acuerdo con dos o más directorios package.conf.d
que está resumiendo. En mi portátil en el momento estos son
/Users/applicative/.ghc/x86_64-darwin-7.0.3/package.conf.d/...
para las cosas locales en ~/.cabal/lib/...
y las protegidas
/Library/Frameworks/GHC.framework/Versions/7.0.3-x86_64/usr/lib/ghc-7.0.3/package.conf.d
para las cosas que se instalaron globalmente con el instalador de la plataforma Haskell (esta ubicación incluye algunas peculiaridades de OS X, ghc
, ghci
, ghc
, están en el bosque en algún lugar, pero están vinculadas a /usr/bin
). Los archivos conf para diferentes paquetes le indican exactamente dónde se instalaron las bibliotecas. Así, por ejemplo, sobre la biblioteca de la base
sagrada,
$ cat base-4.3.1.0-f5c465200a37a65ca26c5c6c600f6c76.conf
me dice:
import-dirs:
/Library/Frameworks/GHC.framework/Versions/7.0.3-x86_64/usr/lib/ghc-7.0.3/base-4.3.1.0
library-dirs:
/Library/Frameworks/GHC.framework/Versions/7.0.3-x86_64/usr/lib/ghc-7.0.3/base-4.3.1.0
En cualquier caso, ¿dónde dice la ghc-pkg list
van los paquetes de cabal install
Cabal? En la carpeta ~/.cabal
, mira la config
archivo. Si no lo ha editado, creo que las líneas comentadas y sin comentarios, si establecen una preferencia, están indicando los valores predeterminados para la instalación con --global
y --user
. En el directorio ~.ghc/
verifique el subdirectorio myghcversion/package.conf.d
y vea si hay algo allí, que debería ser el mismo que le dice ghc-pkg
. (Podría estudiar las opciones para ghc-pkg
en general, por ejemplo, ghc-pkg check
y ghc-pkg recache
, si no lo ha hecho. Es posible que haya instalado algo de alguna manera extraña).
Si instaló ghc
y cabal
and co. al instalar la Plataforma Haskell con un instalador binario o su administrador de paquetes, lo que parece una buena idea, también creo que es una buena idea mantener las bibliotecas de la Plataforma como algo sagrado y asegurarse de que nunca instale nada globalmente desde Hackage ; entre otras cosas, es probable que esto le haga sobrescribir las bibliotecas de la Plataforma, aunque esto no parece ser la dificultad aquí: sería más obvio si lo fuera.