我试图在全局( nix )中覆盖python包(uvloop),这样黑色就可以看到覆盖。
uvloop (python包)测试对我来说是失败的,因为我正在防火墙后面工作。我可以通过直接(ugh)编辑nixpkgs派生来设置doCheck = false来构建使用uvloop的东西。
我试图将其编码到一个覆盖中,但没有成功--覆盖被读取(例如,语法错误导致失败),但我在覆盖层中所做的任何事情实际上都无法阻止测试运行。
我尝试过使用https://nixos.wiki/wiki/Overlays、https://nixos.org/manual/nixpkgs/stable/#how-to-override-a-python-package-using-overlays和如何在现有包- nix派生中使用自定义python? (使用packageOverrides来覆盖python;使用pythonOverrides;以及使用和不使用overridePythonAttrs);对于python3和python39,但是都没有成功。
例如,
self: super: {
python3 = super.python3.override {
packageOverrides = pyself: pysuper: {
uvloop = pysuper.uvloop.overrideAttrs (_: {
doCheck = false;
});
};
};
}为了获得额外的积分,我想在python包uvloop的所有实例中实现这一点--不仅仅是3.9中的一个--但是我会接受任何我能得到的帮助。
谢谢,
发布于 2022-02-24 00:42:30
下面这句话对我很管用。它将补丁应用于twitch下载器(Python应用程序),并应用于twitch(twitch下载程序使用的Python库)。nix-env -iA nixpkgs.twitch-chat-downloader安装了一个twitch聊天下载程序的补丁副本,它使用了twitch的补丁副本。
{
packageOverrides = pkgs: {
python3 = pkgs.python3.override {
packageOverrides = python-self: python-super: {
twitch-python = python-super.twitch-python.overrideAttrs (attrs: {
patches = (attrs.patches or []) ++ [
./twitch-allow-no-token.patch
];
});
};
};
twitch-chat-downloader = pkgs.twitch-chat-downloader.overrideAttrs (attrs: {
patches = (attrs.patches or []) ++ [
./twitch-chat-downloader-no-oauth.patch
];
});
};
}发布于 2022-11-23 16:31:24
同一个包遇到了同样的问题。我无法从Nix文档中获得答案,但我认为这就是正在发生的事情,以及为什么您的示例不起作用。
python3只是python39的别名,就像python3Packages是python39Packages的别名一样(参见这个文档页面)。当重写python3时,您将重写python39的值,但是结果将存储在python3变量中而不是别名中,因此直接通过python39而不是python3别名的其他Nix代码仍然会看到未覆盖的包集。
工作方式
我的工作方式是具体地重写python39的值,并将python3保留为指向新重写的包集的别名:
self: super: {
python39 = super.python39.override {
packageOverrides = pyself: pysuper: {
uvloop = pysuper.uvloop.overrideAttrs (_: {
doCheck = false;
});
};
};
}https://stackoverflow.com/questions/70395839
复制相似问题