Seb*_*raf 11 haskell haskell-stack
我经常安装一个依赖于外部库的软件包,并设法将这些外部库移动到其他位置,以便编译后的程序以加载程序错误退出.
在这些情况下,我只想要堆栈来重建已经安装的软件包,但我不知道这是怎么回事.stack install --force-dirty似乎没有用,因为它只是尝试在当前工作目录中重建项目.
最近的例子:
我想看看是否regex-pcre需要在Windows系统上不存在C库,所以我点击了stack install regex-pcre.这很好,但后来我意识到我在此之前mingw-w64-x86_64-pcre通过stacks 安装了pacman.我再次删除它pacman -R并尝试stack install regex-pcre再次运行,但没有重建它.由于--force-dirty上述原因,也没有添加工作.
Eri*_*ikR 17
更新:
基于@Michael Snoyman的注释,只需使用此命令就足以删除包:
stack exec -- ghc-pkg unregister --force regex-pcre
Run Code Online (Sandbox Code Playgroud)
原答案:
我不知道这是否是受制裁的方式,但似乎有效.这是一个概要:
ghc-pkg您正在使用的GHC版本的程序$ghcpkg --package-db $pkgdb unregister --force <package>precompiled目录中删除包文件假设我们要删除的包是zlib-0.5.4.2.
找到ghc-pkg
在〜/ .stack /程序下找到适合你的编译器版本的ghc-pkg程序,例如~/.stack/programs/x86_64-osx/ghc-7.10.2/bin/ghc-pkg.叫这个$ghcpkg
找到包db
在〜/ .stack/snapshots下找到pkgdb您正在使用的解析器的目录,例如~/.stack/snapshots/x86_64-osx/lts-3.1/7.10.2/pkgdb.叫这个$pkgdb.
取消注册包
跑:
$ghcpkg --package-db $pkgdb unregister --force zlib-0.5.4.2
Run Code Online (Sandbox Code Playgroud)
忽略有关破损或破坏包裹的任何警告.
您可以使用以下命令检查您的包是否已注册:
$ghcpkg --package-db $pkgdb list | grep zlib
Run Code Online (Sandbox Code Playgroud)
从precompiled目录中删除包
在~/.stack/precompiled找到任何名为的目录下zlib-0.5.4.2,删除相关版本的GHC:
find ~/.stack/precompiled -name 'zlib-*'
/bin/rm -rf ...
Run Code Online (Sandbox Code Playgroud)
重新安装包
stack --resolver=... install zlib
Run Code Online (Sandbox Code Playgroud)
堆栈应报告它正在重建包.