如何查看flake.nix传入输入参数后的输出结构?及报错与内置函数咨询
问题分析与解决
1. 报错根源
你直接把cosmos.inputs传给outputs函数是行不通的——cosmos.inputs里的每一项只是输入的声明信息(比如flake的URL、指定分支这类描述),并没有被实际拉取、构建成可用的flake对象。当outputs尝试访问inputs.flake-utils.lib时,这个路径对应的实际值根本不存在,所以才会报属性缺失的错误。
2. 查看flake输出结构的正确方式
要查看flake传入输入后的完整输出结构,推荐两种实用方法:
方式一:用nix flake show命令直接查看
在终端执行这条命令,它会自动处理所有输入依赖,然后输出完整的结构:
nix flake show github:informalsystems/cosmos.nix
方式二:用内置builtins.getFlake在Nix代码中获取
如果要在Nix表达式里操作并查看输出,用builtins.getFlake就够了,它会自动完成输入的拉取、实例化,再调用outputs得到结果:
let cosmos = builtins.getFlake "github:informalsystems/cosmos.nix"; in # 打印完整输出结构 cosmos.outputs # 也可以只看特定系统的输出,比如x86_64-linux # cosmos.outputs.x86_64-linux
要运行这段代码,执行:
nix eval -f <(echo '<上面的Nix代码>')
3. 替代你原有代码的内置方案
你原来手动调用outputs的需求,builtins.getFlake已经完全覆盖了——它会自动把解析好的所有输入传递给flake的outputs函数,返回最终的输出结果。不需要手动import flake.nix再调用outputs,这种手动方式根本处理不了输入依赖的解析工作。
内容的提问来源于stack exchange,提问作者Pierre-olivier Gendraud
相关产品推荐
相关产品推荐

