2016-05-15 16 views
7

Spesso installo un pacchetto che dipende da librerie esterne e riesco a spostare quelle librerie esterne in altre posizioni in seguito, in modo che i programmi compilati escano con un errore del caricatore.Forza `stack` per ricostruire un pacchetto installato

In questi casi voglio solo stack per ricostruire un pacchetto già installato, ma non vedo come sia possibile. stack install --force-dirty non sembra funzionare, in quanto cerca solo di ricostruire il progetto nella directory di lavoro corrente.


esempio recente:

mi era piaciuto per vedere se regex-pcre richiede una libreria C non presente sui sistemi Windows, così mi ha colpito stack install regex-pcre. È andato tutto bene, ma poi mi sono reso conto di aver installato mingw-w64-x86_64-pcre tramite stack s pacman prima di questo. L'ho rimosso nuovamente tramite pacman -R e ho provato a eseguire nuovamente stack install regex-pcre, che non è stato ricostruito. Né l'aggiunta di --force-dirty ha funzionato per il motivo sopra.

risposta

9

Aggiornamento:

Sulla base di commento di @ Michael Snoyman solo usando questo comando dovrebbe essere sufficiente per rimuovere il pacchetto:

stack exec -- ghc-pkg unregister --force regex-pcre 

risposta originale:

non lo faccio sapere se è il modo sanzionato di farlo, ma sembra funzionare. Ecco una sinossi:

  1. individuare il programma ghc-pkg per la versione di GHC si utilizza
  2. Individuare la directory del pacchetto-db per la versione resolver
  3. Run $ghcpkg --package-db $pkgdb unregister --force <package>
  4. Rimuovere anche il file del pacchetto da stack precompiled directory

Supponiamo che il pacchetto che vogliamo rimuovere sia zlib-0.5.4.2.

Individuazione GHC-pkg

Sotto ~/.STACK/programmi trovare il programma GHC-pkg appropriato per la versione del compilatore, ad esempio, ~/.stack/programs/x86_64-osx/ghc-7.10.2/bin/ghc-pkg. Chiamare questo $ghcpkg

Individuazione del pacchetto db

Sotto ~/.STACK/istantanee trovano nella directory pkgdb per il resolver che si sta utilizzando, ad esempio, ~/.stack/snapshots/x86_64-osx/lts-3.1/7.10.2/pkgdb. Chiama questo $pkgdb.

Annullare la registrazione del pacchetto di

Run:

$ghcpkg --package-db $pkgdb unregister --force zlib-0.5.4.2 

Ignorare eventuali avvisi sui pacchetti rotti o rottura.

È possibile controllare per vedere se il vostro pacchetto è registrato o meno con questo comando:

$ghcpkg --package-db $pkgdb list | grep zlib 

rimuovere il pacchetto dalla precompiled directory

Sotto ~/.stack/precompiled individuare tutte le directory di nome zlib-0.5.4.2 e rimuovere la uno per la versione pertinente di GHC:

find ~/.stack/precompiled -name 'zlib-*' 
/bin/rm -rf ... 

reinstallare il pacchetto

stack --resolver=... install zlib 

Stack dovrebbe riferire che sta ricostruendo il pacchetto.

+1

Probabilmente si può farla franca semplicemente con 'stack exec - ghc-pkg unregister pkgname' –

+0

Grazie - risposta aggiornata. – ErikR

Problemi correlati