如何使用 nix-build -E 构建具有覆盖的包
How to use nix-build -E to build a package with overrides
特别是,我想用 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
,在这种情况下,我想这个问题可能有两个答案。
错误 expression does not evaluate to a derivation (or a set or list of those) 是由命令中的 '<nixpkgs>'
引起的。
摆脱它可以克服错误,但你的第二个例子失败了 匿名函数在 /nix/store/-nixos-18.09pre142796.4b649a99d84/[=32= .nix:1:1 在 /nix/store/-nixos-18.09pre142796.4b649a99d84/nixos/lib/customisation.nix:74:12[= 用意外参数 'doCheck' 调用27=]
这是因为 override
允许您修改传递给 callPackage
的集合,而该集合没有 doCheck
属性。 doCheck
是传递给 mkDerivation
和其他等效函数的集合的一部分。要更改这些属性,您需要 overrideAttrs
:
nix-build -E '(import <nixpkgs>{}).singularity.overrideAttrs (oldAttrs: { doCheck=true; })' --pure
特别是,我想用 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
,在这种情况下,我想这个问题可能有两个答案。
错误 expression does not evaluate to a derivation (or a set or list of those) 是由命令中的 '<nixpkgs>'
引起的。
摆脱它可以克服错误,但你的第二个例子失败了 匿名函数在 /nix/store/-nixos-18.09pre142796.4b649a99d84/[=32= .nix:1:1 在 /nix/store/-nixos-18.09pre142796.4b649a99d84/nixos/lib/customisation.nix:74:12[= 用意外参数 'doCheck' 调用27=]
这是因为 override
允许您修改传递给 callPackage
的集合,而该集合没有 doCheck
属性。 doCheck
是传递给 mkDerivation
和其他等效函数的集合的一部分。要更改这些属性,您需要 overrideAttrs
:
nix-build -E '(import <nixpkgs>{}).singularity.overrideAttrs (oldAttrs: { doCheck=true; })' --pure