在 Nix 中,如何构建具有 Python 安装后脚本的包?

Jon*_*han 2 nixos nix

我正在尝试为Foliate进行 Nix 推导,这是我的第一个真正的推导,所以我还不知道我在做什么。

这是我到目前为止所拥有的。它构建并安装,但失败并出现以下错误:

Running custom install script '/build/source/build-aux/meson/postinstall.py'
Failed to run install script '/build/source/build-aux/meson/postinstall.py'
FAILED: meson-install
/nix/store/2b4cdbcs1xbqjna5dr4qrr1p9p9bgm98-meson-0.51.2/bin/meson install --no-rebuild
ninja: build stopped: subcommand failed.
builder for '/nix/store/32vn9xlxlk9zb7vmpm90bz5i5qq59fjc-foliate-1.5.3.drv' failed with exit code 1
error: build of '/nix/store/32vn9xlxlk9zb7vmpm90bz5i5qq59fjc-foliate-1.5.3.drv' failed
Run Code Online (Sandbox Code Playgroud)

我尝试添加python3为构建依赖项,但这似乎不起作用。我缺少什么?

另外,还有其他方法可以改进或简化这个推导吗?

Jan*_*nar 5

发生此错误的原因是文件的 shebang 指向类似 的内容/usr/bin/env,而该内容在 Nix 沙箱中不可用。

我们通常通过调用部分patchShebangs中的文件来解决此问题postPatch

有时该文件不可执行,因此您可能需要将其设置为可执行;但这在这里不是问题。

postPatch = ''
  chmod +x build-aux/meson/postinstall.py # not necessary here
  patchShebangs build-aux/meson/postinstall.py
'';
Run Code Online (Sandbox Code Playgroud)

另请注意,我们已经有一个(不完整的)PR 添加了 Foliate,您可能想看一下。