首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Nix薄片中“(导入nixpkgs) {.}”背后的机制是什么?

在Nix薄片中“(导入nixpkgs) {.}”背后的机制是什么?
EN

Stack Overflow用户
提问于 2022-11-16 17:22:56
回答 1查看 73关注 0票数 1

我正努力尽可能多地了解尼克斯薄片。我感到困惑的是,nixpkgs输入通常是导入的,导入的值被作为函数调用。如何将import nixpkgs映射为nixpkgs片中的代码?

看起来,在片中使用nixpkgs是一种常见的做法:

代码语言:javascript
复制
# flake.nix
{
  inputs = {
    flake-utils.url = "github:numtide/flake-utils";
    nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
    /* ... */
  };

  outputs = { self, flake-utils, nixpkgs /*, ... */ }:
    flake-utils.lib.eachDefaultSystem (system:
      let
        pkgs = (import nixpkgs) {
          inherit system;
        };
      in
      {
        /* ... */
      }
    );
}

我的理解是,这个flake的nixpkgs函数中的outputs值是由nixpkgs flake生成的属性集。我知道flake输出是一个派生,一个派生可以导入。但是,导入的值是如何变成函数的呢?我希望它是一个属性集。

我看到尼克斯薄片包括一个lib输出。是否存在具有lib属性路径的属性可调用的机制?我一直在寻找这方面的信息,但我没有发现任何东西。

如果(import nixpkgs) {}有效地调用了lib属性,那么导入与直接调用nixpkgs.lib有什么不同?根据我所读到的,导入派生对强制求值或不强制求值都有一定的影响。我还不明白细节。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-16 18:31:49

薄片的行为与路径类似,因为它们的.outPath属性包含由Nix自动添加到所有片中的片状源路径。

这允许import以Nix值的形式加载文件。

具体来说,因为路径是一个目录,所以它会在其中加载default.nix,然后加载包含函数的impure.nix

请注意,评估片状物的方式(没有--impure),尽管上面有"impure.nix“文件名,但计算始终是纯的。

.outPath属性获得了它的名称,因为它还负责使派生可以强制到字符串。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74464687

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档