gpt4 book ai didi

nix - 何时以及如何使用default.nix、shell.nix 和release.nix?

转载 作者:行者123 更新时间:2023-12-03 07:32:44 37 4
gpt4 key购买 nike

学习如何使用 Nix 包管理器时遇到的第一种 Nix 表达式是 default.nix;在精彩的 NixOS IRC channel 上,我还了解到 shell.nixrelease.nix 的存在。

我的印象是 - 大致 -default.nix 将与 nix-build 一起使用,以简单地构建包,shell.nix 与 nix-shell 一起使用来创建与包的交互环境,release.nix 与 nixops 一起使用来部署包。

由于这可能不完整且部分不正确,并且由于这似乎没有明确记录,因此我希望对此类“标准文件”有清晰而准确的解释;特别是,对于每种文件类型(以及我缺少的任何其他标准文件),我想知道:

  1. 此类文件的典型用例有哪些?它们不应该用于什么用途?
  2. 此文件类型的结构通常如何?它的最低要求是什么?
  3. 您能否在其使用上下文中展示此类文件的范例示例,即包含使用说明并包括在 shell 或另一个 Nix 表达式中使用该文件所需的代码行?

作为一个额外的问题,我想知道在将软件包安装到 NixOS 模块中时应该使用这些标准文件中的哪些(如果有)?那要怎么做呢?

最佳答案

首先,default.nixshell.nix在 Nix 工具中具有特殊含义,但是 release.nix是一种方便的方式。

下一步,default.nix运行时用作默认文件 nix-build ,和shell.nix运行时用作默认文件 nix-shell 。就像你说的那样。

下一步,default.nix不仅仅用于 nix-build 。例如, <nixpkgs/lib/default.nix> 用作函数的聚合器,并且不包含派生。所以不是每个default.nix应该是“构建”的(但如果 default.nix 是派生的属性集,则它将是可构建的,并且 nix-build 将构建所有这些)。

下一步,nix-shell 使用default.nix如果没有shell.nix已找到。

下一步,default.nix导入目录时用作默认文件。所以如果你写x = import ./some/directory; ,然后./some/directory/default.nix将被进口。这实际上应该解释为什么 "nix-build ."使用default.nix .

最后,default.nix 中有两种常见的推导格式。 :推导,和callPackage推导。你不能nix-build后者。 nixpkgs 中的几乎所有包都是用这种风格编写的,请参见 hello 。但是你可以
nix-build -E 'with import <nixpkgs> { }; callPackage ./path/to/default.nix { }'
作为解决方法。 nix-shell也支持这个-E论证。

关于nix - 何时以及如何使用default.nix、shell.nix 和release.nix?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44088192/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com