【问题标题】:Nix: what's the concrete difference between nixpkgs and nixpkgs.pkgs?Nix:nixpkgs 和 nixpkgs.pkgs 之间的具体区别是什么?
【发布时间】:2018-12-15 11:57:48
【问题描述】:

在:

n = import <nixpkgs> {};

n 包含一个属性n.pkgs,它似乎也包含所有可用的包。那么nn.pkgs 有什么区别呢?

这似乎与 Nix 配置的定点语义以及从 nixpkgs 覆盖某些包的可用性有关,但我无法真正理解它并找到明显的区别。

【问题讨论】:

  • 很高兴看到两个答案引用了任何相互矛盾的来源......

标签: nix


【解决方案1】:

import &lt;nixpkgs&gt; {} 为您提供了一个原始的 Nixpkgs 实例,即没有应用任何用户配置。

(import &lt;nixpkgs&gt; {}).pkgs 为您提供了一个 Nixpkgs 版本,该版本具有用户配置的设置并应用了来自 ~/.nixpkgs/config.nix 的覆盖。

【讨论】:

  • 这意味着在 nix-shell 中,您可以获取在 ~/.nixpkgs/config.nix 中指定的新包表达式。
【解决方案2】:

它们之间没有区别。如果你把它放在你的~/.config/nixpkgs/config.nix

{
  packageOverrides = self: { newAttr = "testing testing"; };
}

...您会看到这两个命令具有相同的输出:

$ nix-instantiate --eval -E 'with import <nixpkgs> {}; newAttr' "testing testing" $ nix-instantiate --eval -E 'with import <nixpkgs> {}; pkgs.newAttr' "testing testing"

对于 Nix 2.1.3 和 Nix 1.11.16 都是如此。

在 nixpkgs 中使用 pkgs 别名的目的是让 callPackage 可以为需要它的 nix 函数填写 pkgs 参数。

【讨论】:

    猜你喜欢
    • 2010-12-19
    • 2016-10-16
    • 2011-05-25
    • 1970-01-01
    • 1970-01-01
    • 2015-06-12
    • 2011-09-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多