我尝试构建一个 nix 包
a.nix:
{ lib
, stdenv
, fetchurl
, testVersion
, hello
}:
stdenv.mkDerivation {
name = "libfoo-1.2.3";
src = fetchurl {
url = "http://example.org/libfoo-1.2.3.tar.bz2";
sha256 = "0x2g1jqygyr5wiwg4ma1nd7w4ydpy82z9gkcv8vh2v8dn3y58v5m";
};
}
然后我执行这个 bash 命令
nix-build a.nix
cannot evaluate a function that has an argument without a value ('fetchurl')
有人建议我写这个命令:
nix-build '<nixpkgs>' a.nix
它引发了这个错误
Please be informed that this pseudo-package is not the only part of
Nixpkgs that fails to evaluate. You should not evaluate entire Nixpkgs
without some special measures to handle failing packages, like those taken
by Hydra.
我不是说这就是问题的解决方案,lib 导入没有问题。
有人知道这个问题从何而来吗?
最佳答案
如果您想使用 nix-build
进行调用,并且也使用 pkgs.callPackage
进行调用,请考虑指定默认参数:
{ pkgs ? import <nixpkgs> { system = builtins.currentSystem; }
, lib ? pkgs.lib
, stdenv ? pkgs.stdenv
, fetchurl ? pkgs.fetchurl
, testVersion ? pkgs.testVersion
, hello ? pkgs.hello
}:
stdenv.mkDerivation {
name = "libfoo-1.2.3";
src = fetchurl {
url = "http://example.org/libfoo-1.2.3.tar.bz2";
sha256 = "0x2g1jqygyr5wiwg4ma1nd7w4ydpy82z9gkcv8vh2v8dn3y58v5m";
};
}
...但我一般不建议这样做。选择一种调用约定或另一种,不要同时进行。 (在现代,flake 是一种让代码具有一致结构并可靠地固定输入的好方法:如果您有一个 flake.nix 使用 pkgs.callPackage
来调用您的派生,这将让用户调用 nix build pathToYourFlake#nameOfThePackage
来构建它 - nix build .#
(如果它是 flake 的默认包并且当前目录是您的 flake 的 checkout 目录)。
关于nix - 我不明白为什么我有 "cannot evaluate a function that has an argument without a value (' fetchurl')“当我尝试构建一个包时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74658457/