2015-01-07 14 views
10

Sono un principiante di haskell e cabal, quindi probabilmente mi manca qualcosa di semplice."cabal install cabal-install" non aggiorna la versione cabal in OSX

ho aggiornato cabala-install:

sudo cabal install cabal-install 
Password: 
Resolving dependencies... 
Configuring cabal-install-1.22.0.0... 
Building cabal-install-1.22.0.0... 
Installed cabal-install-1.22.0.0 
Updating documentation index 

Tuttavia cabal --version dice:

cabal-install version 1.18.0.5 
using version 1.18.1.4 of the Cabal library 

Cosa è successo a Cabal-installare 1.22.0.0?

risposta

12

Esistono due modi per creare pacchetti di installazione cabal a livello globale. Si noti che, di conseguenza, cabal potrebbe richiedere sudo.

Questo comando installerà <PACKAGE> a livello globale:

$ cabal install <PACKAGE> --global 

Come soluzione più generale, modificare il file ~/.cabal/config e impostare user-install-False. Questo imposta automaticamente il flag --global in modo da poter scrivere semplicemente cabal install <PACKAGE> senza alcuna preoccupazione. Ecco un frammento del mio file config:

... 
-- split-objs: False 
-- executable-stripping: True 
user-install: False 
-- package-db: 
-- flags: 
... 

Potreste anche voler impostare root-cmd-sudo se non è già, in modo che cabal richiederà automaticamente la password di root quando incontra un problema di permessi.

Ci sono altre informazioni online here.

5

Vedo che c'è una cabala aggiornata a ~/Library/Haskell/bin, quindi potrei sostituire/usr/bin/cabal con un collegamento simbolico a questa copia o potrei copiare questo binario a /usr/bin.

Sono ancora interessato se esiste un modo più elegante/canonico per assicurarsi che la nuova cabala sia quella che viene utilizzata di default.

+3

È tutto determinato dal PERCORSO. – ErikR

+0

Dai un'occhiata a queste risposte: http://stackoverflow.com/a/21200691/3649209, http://stackoverflow.com/a/19736802/3649209. –

2

TLDR: Provare a eseguire hash -r

Bash ha una tabella hash PATH che mappa i comandi per la posizione dei file binari. Si può ancora avere una vecchia versione di cabala installata da qualche parte nel PATH (possibilmente in una sandbox). Dato che la cabala non è un nuovo comando, l'hashtable continuerà a servire la vecchia versione. hash -r ricostruisce la tabella hash, quindi la shell troverà correttamente la nuova versione (a condizione che appaia prima nel tuo percorso rispetto a quella precedente).

+0

risolto il problema per me – jojo

Problemi correlati