gpt4 book ai didi

尼克斯环境 : understading available attribute paths in the active Nix expression

转载 作者:行者123 更新时间:2023-12-04 12:40:22 31 4
gpt4 key购买 nike

在我的 NixOS 机器上,我可以使用 nix-env 查询ghc两种方式打包:

一个是nix-env -f '<nixpkgs>' -qaP ghc这导致输出

ghc  ghc-8.6.5

另一个是 nix-env -qaP ghc这导致输出
nixpkgs.ghc  ghc-8.6.5

对于第二种情况,我想了解为什么活跃的 Nix 表达式有 nixpkgs根属性。
~/.nix-defexpr的内容文件夹和几个子文件夹如下:

enter image description here

事件的 Nix 表达式是如何从 ~/.nix-defexpr 的内容组装而成的?为什么没有 channels根属性?请问 nixpkgs的名字吗? root 属性派生自 nixpkgs 的名称文件夹,或者它是从文件夹的内容派生的,也许是从 default.nix 中声明的东西派生出来的。文件?

最佳答案

Nix manual有一些关于如何的信息 .nix-defexpr组装:

The Nix expressions in this directory are combined into a single set, with each file as an attribute that has the name of the file.



但是,它没有提到如果内容本身就是目录会发生什么。但我发现 this GitHub issue这解释了更多的事情:

  • If a directory is a valid expression (i.e. has default.nix) its expression will be added to the set, otherwise it will be traversed recursively.
  • Names of intermediate directories are completely ignored (i.e. do not take any part in attrpaths).
  • manifest.nix is recursively ignored.


所以,没有 channels root 属性,因为该文件夹没有 default.nix表达。

好的。然后,作为实验,我创建了一个文件夹 .nix-defexpr/foo带文件 default.nix与内容 { zzz = 4; }里面。当我执行 nix-env --install -A foo.zzz我得到:
error: expression does not evaluate to a derivation (or a set or list of those)

这意味着它实际上找到了路径!问题是 4不是推导。

但是如果我创建另一个文件夹 .nix-defexpr/whatever 呢?并放置文件夹 foo 的副本那里?不会有某种名称冲突吗?就在这里:
8f792ff4f96a:~# nix-env --install -A foo.zzz
warning: name collision in input Nix expressions, skipping '/root/.nix-defexpr/whatever/foo'

关于尼克斯环境 : understading available attribute paths in the active Nix expression,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56570124/

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