首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在nix中全局覆盖pythonPackage

如何在nix中全局覆盖pythonPackage
EN

Stack Overflow用户
提问于 2021-12-17 16:04:37
回答 2查看 809关注 0票数 5

我试图在全局( nix )中覆盖python包(uvloop),这样黑色就可以看到覆盖。

uvloop (python包)测试对我来说是失败的,因为我正在防火墙后面工作。我可以通过直接(ugh)编辑nixpkgs派生来设置doCheck = false来构建使用uvloop的东西。

我试图将其编码到一个覆盖中,但没有成功--覆盖被读取(例如,语法错误导致失败),但我在覆盖层中所做的任何事情实际上都无法阻止测试运行。

我尝试过使用https://nixos.wiki/wiki/Overlayshttps://nixos.org/manual/nixpkgs/stable/#how-to-override-a-python-package-using-overlays如何在现有包- nix派生中使用自定义python? (使用packageOverrides来覆盖python;使用pythonOverrides;以及使用和不使用overridePythonAttrs);对于python3和python39,但是都没有成功。

例如,

代码语言:javascript
复制
self: super: {
  python3 = super.python3.override {
    packageOverrides = pyself: pysuper: {
      uvloop = pysuper.uvloop.overrideAttrs (_: {
        doCheck = false;
      });
    };
  };
}

为了获得额外的积分,我想在python包uvloop的所有实例中实现这一点--不仅仅是3.9中的一个--但是我会接受任何我能得到的帮助。

谢谢,

EN

回答 2

Stack Overflow用户

发布于 2022-02-24 00:42:30

下面这句话对我很管用。它将补丁应用于twitch下载器(Python应用程序),并应用于twitch(twitch下载程序使用的Python库)。nix-env -iA nixpkgs.twitch-chat-downloader安装了一个twitch聊天下载程序的补丁副本,它使用了twitch的补丁副本。

代码语言:javascript
复制
{
  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
      ];
    });
  };
}
票数 0
EN

Stack Overflow用户

发布于 2022-11-23 16:31:24

同一个包遇到了同样的问题。我无法从Nix文档中获得答案,但我认为这就是正在发生的事情,以及为什么您的示例不起作用。

python3只是python39的别名,就像python3Packagespython39Packages的别名一样(参见这个文档页面)。当重写python3时,您将重写python39的值,但是结果将存储在python3变量中而不是别名中,因此直接通过python39而不是python3别名的其他Nix代码仍然会看到未覆盖的包集。

工作方式

我的工作方式是具体地重写python39的值,并将python3保留为指向新重写的包集的别名:

代码语言:javascript
复制
self: super: {
  python39 = super.python39.override {
    packageOverrides = pyself: pysuper: {
      uvloop = pysuper.uvloop.overrideAttrs (_: {
        doCheck = false;
      });
    };
  };
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70395839

复制
相关文章

相似问题

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