尤其是,我想使用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
,在这种情况下,我想这个问题可能有两个答案。
答案 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