如何使用nix-build -E构建带有覆盖的软件包

时间:2018-06-21 20:03:44

标签: nix

尤其是,我想使用doCheck=true进行构建。

首先,当我尝试使用感兴趣的软件包(singularity)时:

nix-build '<nixpkgs>' -E '(import <nixpkgs>{}).singularity'

最终目标将是这样的:

nix-build -E '(import <nixpkgs>{}).singularity.override { doCheck=true; }' --pure 

这两种情况均会导致错误消息:

error: expression does not evaluate to a derivation (or a set or list of those)

当然,也许还有一种更简便的方法来启用checkPhase,在这种情况下,我想这个问题可能有两个答案。

1 个答案:

答案 0 :(得分:3)

错误表达式不能评估为派生(或其中的一个或一个列表)是由命令中的'<nixpkgs>'引起的。

摆脱这个错误可以解决问题,但是第二个示例在/nix/store/-nixos-18.09pre142796.4b649a99d84/nixos/pkgs/applications/virtualization/singularity/中使用匿名函数失败default.nix:1:1在/nix/store/-nixos-18.09pre142796.4b649a99d84/nixos/lib/customisation.nix:74:12

这是因为override允许您修改传递给callPackage的集合,并且该集合没有doCheck属性。 doCheck是传递给mkDerivation和其他等效函数的集合的一部分。要更改这些属性,您需要overrideAttrs

 nix-build -E '(import <nixpkgs>{}).singularity.overrideAttrs (oldAttrs: { doCheck=true; })' --pure