如何将自定义 python 与现有包一起使用 - nix 派生?

2024-02-23

我定义了一个带有未合并补丁的自定义 nix cpython 派生。如果我将其指定为目标 nix-shell 就会得到我期望的版本。

{ pkgs ? import <nixpkgs> {} }:
(pkgs.python3.overrideAttrs (old:  {
    src = pkgs.fetchFromGitHub {
      owner = "bergkvist";
      repo = "cpython";
      rev = "01bcf2bef5f4ffffb454da35cb66b186a7a12598";
      sha256 = "1713sx5izd745bgr6fdx6d1g7ivaqy6jrf9v5jgml31bd1nmfccy";
    };
    verions = "3.11.5";
 })) })).override {
    sourceVersion = {major = "3"; minor = "11" ; patch = "5"; suffix = ""; };
  };

$ nix-shell
$ python
Python 3.11.0a0 (default, Aug  4 2021, 00:12:31) [Clang 7.1.0 (tags/RELEASE_710/final)] on darwin
Type "help", "copyright", "credits" or "license" for more information.

但我没有看到如何对现有包使用新的 cpython 的方法。 直接叠加不会影响任何东西。

{ pkgs ? import <nixpkgs> {} }:
let myPatchedPython = ... ;
    myPkgs = pkgs.extend(self: super: {
      python3 = myPatchedPython;
      python39 = myPatchedPython;
    });
in myPkgs.python39Packages.send2trash
$ nix-shell
$ python3 
Python 3.9.5 (default, Jul 18 2021, 14:31:15)

我注意到我可以使用覆盖,但它仅适用于运行时,并且不适用于所有包。

let  useMyPy = drv: drv.override {
    python = myPatchedPython;
    python3 = myPatchedPython;
    python38 = myPatchedPython;
    python39 = myPatchedPython;
  };
pyobjc-core = useMyPy (pkgs.python39Packages.buildPythonPackage rec {
    pname = "pyobjc-core";
    version = "7.3";
    adfasdf = true;
    name = "${pname}-${version}";
    src = pkgs.python39Packages.fetchPypi {
      pname = "pyobjc-core";
      inherit version;
      sha256 = "0x3msrzvcszlmladdpl64s48l52fwk4xlnnri8daq2mliggsx0ah";
    };
 propagatedBuildInputs = [
      myPatchedPython
      pkgs.darwin.libobjc
      pkgs.darwin.cctools
      pkgs.darwin.apple_sdk.frameworks.Foundation
      pkgs.darwin.apple_sdk.frameworks.AppKit
      pkgs.darwin.apple_sdk.frameworks.CoreServices
      pkgs.darwin.apple_sdk.frameworks.Cocoa
      pkgs.python39Packages.setuptools
    ];
    buildInputs = [ pkgs.libffi ];
  });

in pyobjc-core
$ nix-shell
$ python3
Python 3.11.0a0 (default, Aug  4 2021, 00:12:31) [Clang 7.1.0 (tags/RELEASE_710/final)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import import AppKit
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/nix/store/jcc0xf3zwxnzzh497nip7v57k68r4zb9-python3.9-pyobjc-7.3/lib/python3.9/site-packages/AppKit/__init__.py", line 10, in <module>
    import Foundation
    ^^^^^^^^^^^^^^^^^
...

AFAIK,执行此操作的官方方法是在overlay https://nixos.org/manual/nixpkgs/stable/#sec-overlays-lookup对于 nixpkgs(在~/.config/nixpkgs/overlays.nix),并像这样调用 nix-shell:

nix-shell -p myPatchedPython

如果这不起作用,您也可以尝试nix-shell -E '(import <nixpkgs> {}).myPatchedPython'等等,这给你更多的调试角度。

我过去成功使用的更迂腐的方法(没有覆盖)是直接复制或包含您修补过的Python版本shell.nix 文件 https://nixos.wiki/wiki/Development_environment_with_nix-shell, e.g.:

{ pkgs ? import <nixpkgs> {} }:
pkgs.mkShell {
  buildInputs = [
    pkgs.python.overrideAttrs { ... }
  ];
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将自定义 python 与现有包一起使用 - nix 派生? 的相关文章

随机推荐

  • Git 在结帐时更改我的文件权限

    我们的工作流程是在本地计算机上开发 将更改提交到中央存储库 然后检查我们需要的该存储库的分支 问题是 Git 会根据签出的用户更改其签出的文件的所有权甚至文件权限 这样做的直接结果是 我们的 CSS 文件在签出后变得不可读 因为 Git 将
  • 使用 C# 命令行 GPG 解密 - 密码?

    我正在使用命令行来加密我发送的文件 但我正在尝试找出如何使用相同的方法来解密它们 如果我运行该命令 系统会提示输入密码 但我看不到使用命令行传递密码的方法 这是我加密文件的方法 var proc new Process proc Enabl
  • 如何从计算引擎访问谷歌驱动器

    我以前没有使用过 GCE 但计划将其用于一些 CPU 绑定的 R 脚本 我看到定价的网络部分说谷歌驱动器有免费的出口和入口 我没有看到任何有关如何从 GCE 中访问我的 google 驱动器的文档 有人可以向我指出这方面的文档吗 我建议使用
  • 两个相同的unordered_map的顺序是否相同?

    换句话说 如果我填两个unordered map or unordered set 具有完全相同内容和相同哈希函数的对象 迭代它们会给出相同的键 值对序列吗 如果是这样 那么它成立的条件是什么 例如相同的散列函数 相同的键 不一定是相同的值
  • 检查两个 DecimalUpDown 控件之间的有效值 - MVVM

    我的窗口中有两个 DecimalUpDown 控件 一个应显示文本框的最大值 另一个应显示最小值 最小控制值不能大于最大控制值 反之亦然 请注意 红色值是错误的 我怎样才能实现这个 我正在使用 MVVM 模式 谢谢 史蒂夫 您应该在视图模型
  • 在 ggplot2 的图中添加一个指向 x 轴的箭头

    我的目标是获得一个带有指向 x 轴的文本的箭头来标记平均词频 我一生都无法弄清楚如何在 ggplot2 中的绘图区域之外获取箭头或文本 这是我的代码 ggplot SUMMARY PCTDIFF aes principle pctdiff
  • MySQL 错误代码:1064。您的 SQL 语法有错误

    真的 可能有什么问题吗 它并没有变得更简单 整个查询 line 1 use foo line 2 line 3 select from test table 1 错误代码 您的 SQL 语法有错误 查看对应的手册 到您的 MySQL 服务器
  • CGEventTapCreate 因“按键按下”事件而神秘崩溃

    我在用着CGEventTapCreate当我的应用程序运行时 从 iTunes 中 窃取 媒体密钥 我传递给的回调内部的代码CGEventTapCreate检查该事件 如果发现它是媒体键之一 则将适当的通知发布到默认通知中心 现在 如果我发
  • C#:如何比较字典值?

    我有一个Dictionary
  • 在 React 应用程序中添加 add sass/scss 的最佳方法是什么?

    我发现 create react app 文档建议使用 node sass 但 npm 中的包说 LibSass 和 Node Sass 已弃用 那么 如果有人可以提供帮助 那么在 React 项目中安装 sass 的最佳方法是什么 我一直
  • 用于客户端层单元测试的模拟 Web 服务

    我有一个业务规则 Visual Studio 类库 NET 2 0 项目 它依赖于 Dynamics Crm Web Services 一个经典的 SOAP Web 引用 而不是 WCF 端点 我想对这些业务规则进行单元测试 而无需背后有真
  • 删除加权有向图中的循环

    这是我其他帖子的后续问题 具有大小约束的聚类算法 https stackoverflow com questions 30112428 algorithm for clustering with size constraints 我正在研究
  • sscanf() 的更安全但易于使用且灵活的 C++ 替代方案

    当我需要从一堆字符串中扫描值时 我经常发现自己又回到了 C 语言sscanf 严格来说是因为它的简单性和易用性 例如 我可以非常简洁地从字符串中提取几个双精度值 string str double val1 val2 if sscanf s
  • 无法重新声明类 sfconfig

    我在 Windows XP 上运行 Symfony 1 2 9 和 PHP 版本 5 2 11 我安装了 APC 版本 3 0 19 我可以运行 PHP 脚本来证明 apc 工作正常 有效 但是 当我尝试在 symfony 操作中使用 AP
  • jQuery 使用 :not 从 div 中选择文本

    我做了一个小提琴 http jsfiddle net hAzJq http jsfiddle net hAzJq 如何选择 div 内的文本而不是 span 内的文本 alert div not span text Use contents
  • 从ansible中注册的变量中检索键的值

    我正在编写各种剧本 用于在 AWS 中配置用户 组 策略等 目前 我正在尝试编写一个任务 从给定的 AWS IAM 账户中删除所有访问密钥 要使用 ansible 中的 iam 模块正确执行此操作 您必须指定要禁用的 AWS 访问密钥 该脚
  • jquery 只捕获第一个按键?

    我有这个代码 j regfname keypress function alert Handler for keypress called 并且只想执行一次 或仅在第一次按键时执行 最理想的方法是什么 您可以使用 jQueryone htt
  • 快速将字符串转换为 CLLocationCooperative2D

    使用 Firebase 作为后端 我有一系列纬度和经度坐标字符串 如何将它们转换为 CLLocationCooperative2D 以便我可以将它们用于注释 这是每次更新时从 Firebase 获取信息的代码 var UpdateRef F
  • Cucumber + Capybara + Selenium:选择文本

    我正在对文本编辑器进行更改 并且需要能够选择文本以使用 JavaScript 对其进行操作 如何使用 Cucumber Capybara 和 Selenium 选择文本 我发现了另一个 stackoverflow 问题 讨论如何使用 Jav
  • 如何将自定义 python 与现有包一起使用 - nix 派生?

    我定义了一个带有未合并补丁的自定义 nix cpython 派生 如果我将其指定为目标 nix shell 就会得到我期望的版本 pkgs import