为什么我在启动堆栈构建时遇到错误?

问题描述 投票:0回答:2

我是 Haskell 编程新手。对于我的大学项目,我们的老师向我们发送了该项目并要求我们运行这些命令:“stack init”然后“stack build”,当我运行 stack build 时出现此错误:

Project.cabal was modified manually. Ignoring Project\package.yaml in favor of the Cabal file.
If you want to use the package.yaml file instead of the Cabal file,
then please delete the Cabal file.
Executable named sh not found on path: ....."Path"

有人可以帮忙解决这个问题吗?

删除所有项目并重试。

haskell haskell-stack ghci
2个回答
0
投票

一般来说,

stack init
仅运行一次来初始化新项目。您通常会在空目录中运行它,它将从某个模板创建一个
stack.yaml

此模板

stack.yaml
主要包含解释所有不同选项的注释。

但是,您也可以手动创建它,例如:

resolver: lts-20.16

一旦您的

stack.yaml
就位,有两个选项:

您可以使用传统的

<your-project-name>.cabal
文件,也可以编写
package.yaml
文件。有关如何编写此类文件的详细信息,请参阅https://github.com/sol/hpack

当你使用

stack build
时,只有一个
.cabal
文件而没有
package.yaml
,那么Stack将使用它。

但是,如果

package.yaml
存在,那么 Stack 会自动为您创建并更新
<your-project-name>.cabal
文件。

在此之前,它将检查该文件是否比

stack.yaml
package.yaml
新,以避免可能覆盖该文件中的任何手动更改。

因此,您收到的错误消息 should 通常意味着某个男孩(即您的老师)手动编辑了

Project.cabal
文件,尽管
package.yaml
存在。

然而,令人费解的是,通常情况下,这两个文件都应该位于项目的根目录中 - 但您的错误消息中包含 Windows 风格的路径名。

然后,还有更令人不安的最后一行 - 关于在路径上找不到

sh

您是否可能尝试在 Windows 上运行此程序?

我自己从未在 Windows 上使用过 Haskell,所以我不知道它应该如何工作。但是,对于某些尚未完全移植到 Windows 的 Linux / Unix 软件来说,关于未找到 Linux / Unix 命令解释器

sh
的错误消息是典型的。

我的“Windows 怀疑”也完全基于错误消息的第一行,其中包含一个带有反斜杠的路径,就像在 Windows 上一样。

但也许我对 Stack 构建过程的一般描述也可以帮助阐明这一点。


0
投票

在 Windows 10 上全新安装 GHCup 时也遇到同样的问题。

    Executable named sh not found on path: ~entire windows path variable~

由于某种原因,GHCup 不会将 msys 添加到安装路径中,其中包含 sh.exe。

假设使用默认安装选项,通过 Windows 对话框将以下内容添加到“Path”用户环境变量中:

    C:\ghcup\msys64\usr\bin

通过阅读旧的堆栈错误找到解决方案这里

© www.soinside.com 2019 - 2024. All rights reserved.