【问题标题】:How to know the build plan and store path without building a Nix expression?如何在不构建 Nix 表达式的情况下知道构建计划和存储路径?
【发布时间】:2018-08-30 07:03:28
【问题描述】:

nix-build ... --no-out-link 给出了 Nix 商店中的路径。

  • 是否可以在不实际构建表达式的情况下找出该路径?

  • 是否可以在不构建表达式的情况下找出依赖关系和计划的构建操作?

  • 我自己怎么才能找到答案?

【问题讨论】:

    标签: nix


    【解决方案1】:

    Nix manual,“构建和测试”部分指的是nix-build 文档,在最后的“描述”段落中提到它是nix-instantiatenix-store -r 的组合。

    nix-instantiate 不构建。它只计算计划,以 派生 及其闭包的形式:

    $ nix-instantiate '<nixpkgs>' -A hello
    warning: you did not specify '--add-root'; the result might be removed by the garbage collector
    /nix/store/20bc2g6gfn44p9wk98s30pm346pmz0x9-hello-2.10.drv
    

    不过,我更喜欢使用nix repl 来探索 Nix 表达式:

    $ nix repl '<nixpkgs>'
    Loading '<nixpkgs>'...
    Added 8623 variables.
    nix-repl> hello.outPath
    "/nix/store/nic2bl8ry6vfyxr9717983d5b2l4sn1c-hello-2.10"
    

    它的制表符补全在探索表达式时非常有用。

    【讨论】:

      【解决方案2】:

      man nix-store 有答案,尤其是--query 部分。

      要知道输出路径:

      nix-store -q --outputs $(nix-instanciate default.nix)
      

      要了解构建时依赖项:

      nix-store -qR --include-outputs $(nix-instanciate default.nix)
      

      至于构建计划,我越接近使用--tree 标志。

      请注意,nix-shell 也公开了一个 $out 变量,因此第一个要点的另一种可能的解决方案是:

      nix-shell --pure --run 'echo $out' some-file.nix
      

      【讨论】:

      • 我认为 nix-env -qa --no-name --out-path hello 适用于“hello”,并且可以使用带有 -f 标志的文件。
      • 谢谢@noteed。注意:您将 nix-instantiate 拼错为 nix-instantiate。
      猜你喜欢
      • 2017-05-20
      • 2022-10-05
      • 1970-01-01
      • 2019-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-01
      相关资源
      最近更新 更多