为什么 Stack 无法识别它刚刚安装的依赖项?
Why does Stack not recognize the dependency it just installed?
所以我正在尝试使用 reactive-banana + wxHaskell 进行 GUI 编程。作为 Haskell 及其开发工具的新手,我对堆栈感到非常困惑。
所以我尝试 stack install wx
,它提示我安装 wxcore
,它提示我安装 wxc
和 wxdirect
。在 stack install wxdirect
之后,我尝试 运行 stack install wxc
,但是你瞧:
While constructing the BuildPlan the following exceptions were encountered:
-- Failure when adding dependencies:
wxdirect: needed (>=0.90.1.1), not present in build plan (latest is 0.92.1.0)
needed for package: wxc-0.92.1.1
-- While attempting to add dependency,
Could not find package wxdirect in known packages
Recommended action: try adding the following to your extra-deps in {project root}/stack.yaml
- wxdirect-0.92.1.0
简而言之,我正在尝试像 cabal-install
一样使用 stack
。而且我不确定为什么这是错误的。如果错了,那么 stack
和 cabal-install
有什么区别?
stack 和 cabal 安装的区别在于 stack 需要一个精选的(包,版本)列表。结果是 stack 将确保那些版本的包都可以编译并且是愉快的。不过,wxdirect 似乎还没有出现在精选列表中。您应该 file a PR with stackage,这是一件很棒的事情,因为它也会为其他用户解决此问题。
您也可以采纳最后几行中给出的建议:
Recommended action: try adding the following to your extra-deps in {project root}/stack.yaml
- wxdirect-0.92.1.0
并修改您的 stack.yaml 文件。更改默认值
# Packages to be pulled from upstream that are not in the resolver (e.g., acme-missiles-0.3)
extra-deps: []
到
extra-deps:
- wxdirect-0.92.1.0
stack 现在将尝试安装,假装该(包、版本)已进入精选列表。
您可能仍然 运行 遇到以下问题。
我没有 stack.yaml
如果你不在一个项目中(并且你想将一个包堆叠安装到用户数据库,cabal install 会默默地做这件事),你会 运行 进入这个。这是 stack 和 cabal install 之间的区别之一,但这是一个很好的区别:cabal 安装包只是将它放入全局数据库中。这很好,直到需要更新包。使用堆栈,您总是在一个项目中。如果您 运行 堆栈在带有 stack.yaml 的项目之外,堆栈将参考您的 ~/.stack/global/stack.yaml
。只需将 extra-deps 放在那里即可。
它不会构建
确保堆栈升级并且使用 resolver:
中的最新 LTS 版本,stack.yaml
中的另一个字段。这可确保您拥有最新的策展。
它仍然无法构建
您可能需要尝试旧版本的 wxdirect。 Stackage 软件包有时(但通常不会)落后于每个软件包的最新版本。
还是建不起来
您可能 运行 遇到堆栈问题。我以前见过堆栈错误。您也可以在 IRC channel 上提问。如果这不起作用,请在 /r/haskell 上找 Edward Kmett,他会用数学解决它。
所以我正在尝试使用 reactive-banana + wxHaskell 进行 GUI 编程。作为 Haskell 及其开发工具的新手,我对堆栈感到非常困惑。
所以我尝试 stack install wx
,它提示我安装 wxcore
,它提示我安装 wxc
和 wxdirect
。在 stack install wxdirect
之后,我尝试 运行 stack install wxc
,但是你瞧:
While constructing the BuildPlan the following exceptions were encountered:
-- Failure when adding dependencies:
wxdirect: needed (>=0.90.1.1), not present in build plan (latest is 0.92.1.0)
needed for package: wxc-0.92.1.1
-- While attempting to add dependency,
Could not find package wxdirect in known packages
Recommended action: try adding the following to your extra-deps in {project root}/stack.yaml
- wxdirect-0.92.1.0
简而言之,我正在尝试像 cabal-install
一样使用 stack
。而且我不确定为什么这是错误的。如果错了,那么 stack
和 cabal-install
有什么区别?
stack 和 cabal 安装的区别在于 stack 需要一个精选的(包,版本)列表。结果是 stack 将确保那些版本的包都可以编译并且是愉快的。不过,wxdirect 似乎还没有出现在精选列表中。您应该 file a PR with stackage,这是一件很棒的事情,因为它也会为其他用户解决此问题。
您也可以采纳最后几行中给出的建议:
Recommended action: try adding the following to your extra-deps in {project root}/stack.yaml
- wxdirect-0.92.1.0
并修改您的 stack.yaml 文件。更改默认值
# Packages to be pulled from upstream that are not in the resolver (e.g., acme-missiles-0.3)
extra-deps: []
到
extra-deps:
- wxdirect-0.92.1.0
stack 现在将尝试安装,假装该(包、版本)已进入精选列表。
您可能仍然 运行 遇到以下问题。
我没有 stack.yaml
如果你不在一个项目中(并且你想将一个包堆叠安装到用户数据库,cabal install 会默默地做这件事),你会 运行 进入这个。这是 stack 和 cabal install 之间的区别之一,但这是一个很好的区别:cabal 安装包只是将它放入全局数据库中。这很好,直到需要更新包。使用堆栈,您总是在一个项目中。如果您 运行 堆栈在带有 stack.yaml 的项目之外,堆栈将参考您的 ~/.stack/global/stack.yaml
。只需将 extra-deps 放在那里即可。
它不会构建
确保堆栈升级并且使用 resolver:
中的最新 LTS 版本,stack.yaml
中的另一个字段。这可确保您拥有最新的策展。
它仍然无法构建
您可能需要尝试旧版本的 wxdirect。 Stackage 软件包有时(但通常不会)落后于每个软件包的最新版本。
还是建不起来
您可能 运行 遇到堆栈问题。我以前见过堆栈错误。您也可以在 IRC channel 上提问。如果这不起作用,请在 /r/haskell 上找 Edward Kmett,他会用数学解决它。