我经常安装一个依赖外部库的软件包,并设法将这些外部库移动到其他位置,以便编译后的程序以加载程序错误退出。
在这些情况下,我只想要堆栈来重建已安装的软件包,但我不知道这是怎么回事。 stack install --force-dirty
似乎不起作用,因为它只是尝试在当前工作目录中重建项目。
最近的例子:
我想看看regex-pcre
是否需要Windows系统上没有的C库,所以我点击stack install regex-pcre
。这很顺利,但之后我意识到我在此之前通过mingw-w64-x86_64-pcre
s stack
安装了pacman
。我通过pacman -R
再次删除了它,并尝试再次运行stack install regex-pcre
,但没有重建它。由于上述原因,无法添加--force-dirty
。
答案 0 :(得分:14)
<强>更新强>
基于@Michael Snoyman的评论,只需使用此命令即可删除该软件包:
stack exec -- ghc-pkg unregister --force regex-pcre
原始答案:
我不知道这是否是受制裁的方式,但似乎有效。这是一个概要:
ghc-pkg
程序$ghcpkg --package-db $pkgdb unregister --force <package>
precompiled
目录假设我们要删除的包是zlib-0.5.4.2
。
找到ghc-pkg
在〜/ .stack / programs下找到适合你的编译器版本的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
忽略有关破损或破坏包裹的任何警告。
您可以使用此命令检查您的包是否已注册:
$ghcpkg --package-db $pkgdb list | grep zlib
从precompiled
目录
在~/.stack/precompiled
下找到名为zlib-0.5.4.2
的所有目录,并删除相关版本的GHC:
find ~/.stack/precompiled -name 'zlib-*'
/bin/rm -rf ...
重新安装软件包
stack --resolver=... install zlib
Stack应该报告它正在重建包。