trying to debug a different question时,我安装了一个似乎与其他已安装软件包冲突的软件包。
我跑了
$ stack install regex-pcre-text
regex-pcre-builtin-0.94.4.8.8.35: configure
regex-tdfa-1.2.3.1: download
regex-pcre-builtin-0.94.4.8.8.35: build
regex-tdfa-1.2.3.1: configure
regex-tdfa-1.2.3.1: build
regex-pcre-builtin-0.94.4.8.8.35: copy/register
regex-tdfa-1.2.3.1: copy/register
regex-tdfa-text-1.0.0.3: download
regex-tdfa-text-1.0.0.3: configure
regex-tdfa-text-1.0.0.3: build
regex-tdfa-text-1.0.0.3: copy/register
regex-pcre-text-0.94.0.1: download
regex-pcre-text-0.94.0.1: configure
regex-pcre-text-0.94.0.1: build
regex-pcre-text-0.94.0.1: copy/register
Completed 4 action(s).
我不能再简单地导入
Text.Regex.PCRE
当我尝试时,我现在看到:
$ stack ghci
Prelude> :set -XOverloadedStrings
Prelude> import Text.Regex.PCRE
收益
<no location info>: error:
Ambiguous module name ‘Text.Regex.PCRE’:
it was found in multiple packages:
regex-pcre-0.94.4 regex-pcre-builtin-0.94.4.8.8.35
我想将安装恢复到较早的状态,以使机器上无条件地导入Text.Regex.PCRE
的代码可以像以前一样继续工作。
但是,看来堆栈没有明确的卸载:
$ stack uninstall regex-pcre-text
Error: stack does not manage installations in global locations. The only global mutation stack performs is executable copying. For the default executable destination, please run stack path --local-bin
我不愿简单地运行此stack path --local-bin
,因为我不知道它会做什么,或者它是否可以反转(这是我在安装上述软件包时首先出现的错误)。什么是解决导入问题的正确方法?
我尝试了建议here:
$ ghc-pkg unregister regex-pcre-text
ghc-pkg: cannot find package regex-pcre-text
$ stack exec ghc-pkg unregister regex-pcre-text
ignoring (possibly broken) abi-depends field for packages
答案 0 :(得分:1)
问题是regexp-pcre-text
安装了其依赖项regex-pcre-builtin
,这导致了冲突。您要在全局项目中(即,在任何特定项目目录之外)运行以下命令的和:
$ stack exec ghc-pkg unregister regex-pcre-text
$ stack exec ghc-pkg unregister regex-pcre-builtin
您已经运行了第一个,尽管有关于abi-depends
字段的警告消息,我也怀疑它已成功完成,所以您只需要运行第二个。
(这些可以组合成一个命令:
$ stack exec ghc-pkg unregister regex-pcre-text regex-pcre-builtin
但是鉴于您已经删除了第一个软件包,我相信这会失败并显示一条消息,提示找不到regex-pcre-text
。
@DarthFennec提到的解决方案是使用PackageImports
扩展名来解决冲突。在GHCi中,即使同时安装了两个软件包,也要使用regex-pcre
软件包中的模块:
Prelude> :set -XPackageImports
Prelude> import "regex-pcre" Text.Regex.PCRE
Prelude Text.Regex.PCRE>