nix - 我不明白为什么我有 "cannot evaluate a function that has an argument without a value (' fetchurl')“当我尝试构建一个包时

标签 nix

我尝试构建一个 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/

相关文章:

python - 如果它不在 nixpkgs 中,如何将 python 包添加到 shell.nix?

haskell - Nix 上的 XMonad - 找不到 xmonad-contrib

nix-env -qa 不显示最新的软件包

nix - 如何在商店中找到派生路径,从编译后的包路径开始?

nix - 将运行时依赖注入(inject) nix 包

c++ - 如何让 OpenCV 在 nix 中工作?

nix - 如何在 Nix 中组合两个列表?

macos - 在没有 T2 芯片的 Mac 上的 FileVault 加密启动卷上,在 macOS Catalina 和 Big Sur 上安装 Nix 时出错

docker - 如何在 docker 镜像中应用 nix-shell 配置?

nix - 为什么一些官方 Nix Docker 容器没有 `nixos-rebuild` 命令?