2015-01-25 12 views
9

Haskell novizio e pitone qui.Perchè cabal sandbox init non cambia PATH come fa virtualenv?

credo di mancare qualcosa qui, ma se si guarda al Yesod's quickstart, l'autore installare alcuni pacchetti primacabal sandbox init. Ho visto lo stesso modello altrove. Domande:

  1. Mi manca qualcosa? È questo il vero modo di usare la sandbox cabal?
  2. Perché non posso (o non dovrei) installare yesod-bin all'interno di una sandbox?
  3. Cosa succede se utilizzo diverse versioni di yesod-bin in alcuni progetti?
  4. Se sono presenti librerie che installano file binari in .cabal-sandbox/bin, perché cabal sandbox init non cambia PATH per corrispondere alla versione in modalità sandbox?

Grazie mille in anticipo!

risposta

8
  1. Sì, questo è come utilizzare una sandbox.

    cabal sandbox init creerà per voi alcuni file/directory che terranno traccia dei pacchetti installati.

    cabal install some_package installerà il pacchetto nella sandbox.

  2. È più che benvenuto installare yesod-bin in una sandbox.

  3. Leggi punto 2

  4. cabal sandbox init non cambia il tuo cammino, perché in realtà non ha bisogno di. Aggiungi PATH=.cabal-sandbox/bin:$PATH nel tuo .bash_profile.

    A differenza di virtual-env, non è mai necessario abilitare o disabilitare una sandbox. Devi solo cd in una directory ed è abilitato automaticamente.

    L'unico vero svantaggio che ho trovato nelle sandbox cabal è che è necessario essere nella directory root per poter agire su una sandbox. Ciò significa che se si è in una sottodirectory, l'esecuzione di cabal install some_package non verrà installata nella sandbox di livello superiore, ma verrà installata nel database globale o utente, a seconda di come è stato configurato cabal.

+0

Meglio di quanto pensavo. Grazie! –

+1

Se non si è nella directory radice della sandbox cabal, è comunque possibile lavorare in tale sandbox puntando la cabal al file di configurazione corretto: 'cabal --config = \ cabal.sandbox.config '. – user2407038

6

cabal exec consente di eseguire un programma nel contesto di una sandbox. Cambia il percorso per includere la cartella bin della sandbox. Puoi vederlo eseguendo cabal exec printenv all'interno della sandbox.

Inoltre, le ultime versioni di cabal consentono di creare sandbox in cartelle senza file .cabal. Dopo aver eseguito cabal sandbox init, è possibile solo cabal install le dipendenze necessarie.

Quindi, per utilizzare diverse versioni di yesod-bin, installarli in sandbox diversi e quindi richiamare cabal exec yesod-bin su ciascuno di essi.

(punta Extra: cabal exec gchi è un comando utile che rende ghci conoscenza del contenuto della sandbox.)

Problemi correlati