在导入nixpkgs时,使用薄片叠加的覆盖物导致`错误:属性' autoSlot'缺少'
就像标题一样;当我使用attrvalues覆盖
时,例如在以下示例中:
{
description = "Shared settings for our packages!";
inputs = {
nixpkgs.url = github:NixOS/nixpkgs/nixos-22.05;
flake-utils.url = github:numtide/flake-utils;
flake-compat = {
url = "github:edolstra/flake-compat";
flake = false;
};
};
outputs = inputs@{ self, nixpkgs, flake-utils, ... }: with builtins; with flake-utils.lib; let
lib = import ./package.nix nixpkgs;
overlays = with lib; rec {
overlays = let
lib-overlay = import ./overlay.nix nixpkgs;
in j.foldToSet' [
{
lib = lib-overlay;
default = lib-overlay;
}
(j.imports.overlaySet {
dir = ./callPackages/python2;
func = file: final: prev: j.update.python.callPython.two final prev file;
})
(j.imports.overlaySet {
dir = ./callPackages/python3;
func = file: final: prev: j.update.python.callPython.three final prev file;
})
(j.imports.set { dir = ./overlays; recursive = true; ignores.dirs = true; })
(j.imports.overlaySet { dir = ./callPackages; call = 1; })
];
overlay = overlays.default;
defaultOverlay = overlay;
};
make = system: with lib; rec {
# This does not work
legacyPackages = import nixpkgs { inherit system; overlays = attrValues overlays.overlays; };
# This works
legacyPackages = import nixpkgs { inherit system; overlays = with overlays.overlays; [ overlays.overlays.lib Python autoslot ]; };
# Traced here
packages = flattenTree (let _ = j.filters.has.attrs legacyPackages (unique (flatten [
(subtractLists (attrNames nixpkgs.legacyPackages.${system}) (attrNames legacyPackages))
(attrNames overlays.overlays)
])); in trace (attrNames legacyPackages.Python.pkgs.autoslot) _);
package = packages.default;
defaultPackage = package;
apps.default = settings.make.app package;
app = apps.default;
defaultApp = app;
devShells.default = import ./devShell.nix system self;
devShell = devShells.default;
defaultdevShell = devShell;
};
in (eachSystem allSystems make) // overlays // { inherit lib; };
}
指定叠加层手动工作,而attrvalues overlays.overlays
却没有,给我错误error
error:attribute:attribute:attribute “ AutoSlot”缺少
。
As in the title; when I use attrValues overlays
, such as in the following example:
{
description = "Shared settings for our packages!";
inputs = {
nixpkgs.url = github:NixOS/nixpkgs/nixos-22.05;
flake-utils.url = github:numtide/flake-utils;
flake-compat = {
url = "github:edolstra/flake-compat";
flake = false;
};
};
outputs = inputs@{ self, nixpkgs, flake-utils, ... }: with builtins; with flake-utils.lib; let
lib = import ./package.nix nixpkgs;
overlays = with lib; rec {
overlays = let
lib-overlay = import ./overlay.nix nixpkgs;
in j.foldToSet' [
{
lib = lib-overlay;
default = lib-overlay;
}
(j.imports.overlaySet {
dir = ./callPackages/python2;
func = file: final: prev: j.update.python.callPython.two final prev file;
})
(j.imports.overlaySet {
dir = ./callPackages/python3;
func = file: final: prev: j.update.python.callPython.three final prev file;
})
(j.imports.set { dir = ./overlays; recursive = true; ignores.dirs = true; })
(j.imports.overlaySet { dir = ./callPackages; call = 1; })
];
overlay = overlays.default;
defaultOverlay = overlay;
};
make = system: with lib; rec {
# This does not work
legacyPackages = import nixpkgs { inherit system; overlays = attrValues overlays.overlays; };
# This works
legacyPackages = import nixpkgs { inherit system; overlays = with overlays.overlays; [ overlays.overlays.lib Python autoslot ]; };
# Traced here
packages = flattenTree (let _ = j.filters.has.attrs legacyPackages (unique (flatten [
(subtractLists (attrNames nixpkgs.legacyPackages.${system}) (attrNames legacyPackages))
(attrNames overlays.overlays)
])); in trace (attrNames legacyPackages.Python.pkgs.autoslot) _);
package = packages.default;
defaultPackage = package;
apps.default = settings.make.app package;
app = apps.default;
defaultApp = app;
devShells.default = import ./devShell.nix system self;
devShell = devShells.default;
defaultdevShell = devShell;
};
in (eachSystem allSystems make) // overlays // { inherit lib; };
}
Specifying overlays manually works, while attrValues overlays.overlays
does not, giving me the error error: attribute 'autoslot' missing
.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
其原因是每个新覆盖层没有更新的Python软件包;由 jan tojnar的回复t/prev-python-override/20066/2“ rel =“ nofollow noreferrer”>此处::
The reason for this were the Python Packages not updating with each new overlay; solved by Jan Tojnar's reply here: