You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Numba补丁应用失败求助:parallel.py代码块匹配出错

Numba补丁应用失败:parallel.py Hunk匹配问题

问题背景

我完全不懂patch相关操作,每次构建都会从原始源码提取文件,没法直接修改原文件。因为部分文件路径变更,我已经调整了.patch文件,但应用补丁时,numba/np/ufunc/parallel.py的第1个代码块(Hunk)匹配失败,相关拒绝信息已保存到rej文件。


完整补丁文件

--- 原源码/numba/core/caching.py       2020-01-29 15:21:49.000000000 +0000
+++ 修改后源码/numba/core/caching.py        2020-07-26 21:33:10.601661853 +0000
@@ -162,7 +162,9 @@
     """

     def 获取源码时间戳(self):
-        if getattr(sys, 'frozen', False):
+        # Chaquopy:添加True。时间戳无关紧要,因为只要对应的ZIP文件变化,导入器就会删除整个AssetFinder目录树。
+        if True or getattr(sys, 'frozen', False):
             st = os.stat(sys.executable)
         else:
             st = os.stat(self._py_file)
@@ -175,7 +177,7 @@

     @classmethod
     def 从函数创建(cls, py_func, py_file):
-        if not os.path.exists(py_file):
+        if False and not os.path.exists(py_file):  # Chaquopy:禁用此判断
             # 可能是占位符(例如"<ipython-XXX>")
             return
         self = cls(py_func, py_file)
--- 原源码/numba/np/ufunc/parallel.py 2020-01-29 15:21:49.000000000 +0000
+++ 修改后源码/numba/np/ufunc/parallel.py  2020-02-08 22:41:35.162472017 +0000
@@ -288,6 +288,6 @@
     else:
         _backend_init_process_lock = _nop()
-    except OSError as e:
+except (OSError, ImportError) as e:  # Chaquopy:添加ImportError,RLock()会抛出该异常

     # 可能是缺少/dev/shm用于信号量写入,提示用户
     msg = (
--- 原源码/numba/core/cpu.py  2020-01-29 15:21:49.000000000 +0000
+++ 修改后源码/numba/core/cpu.py   2020-02-12 23:11:23.057858562 +0000
@@ -52,7 +52,12 @@

         # 从libgcc_s添加ARM ABI函数
         if platform.machine() == 'armv7l':
-            ll.load_library_permanently('libgcc_s.so.1')
+            # Chaquopy:参见build-libgcc.sh。
+            import ctypes
+            from os.path import dirname, join
+            libgcc_filename = join(dirname(__file__), "libgcc_numba.so")
+            ctypes.CDLL(libgcc_filename, ctypes.RTLD_GLOBAL)  # 提取文件。
+            ll.load_library_permanently(libgcc_filename)  # 仅用CDLL不够。

         # 映射外部C函数。
         externals.c_math_functions.install(self)
--- 原源码/setup.py   2020-01-29 15:21:49.000000000 +0000
+++ 修改后源码/setup.py    2020-02-08 22:14:03.697531223 +0000
@@ -92,6 +92,12 @@
     """
     返回setup()调用所需的Extension实例列表。
     """
+
+    # Chaquopy相关修改
+    import builtins
+    sys.path.insert(0, os.path.abspath("../requirements"))  # 用于numpy.distutils
+    builtins.__NUMPY_SETUP__ = True  # 阻止导入NumPy的其他部分。
+
     # 注意我们不在顶层导入Numpy,因为setup.py应该能在没有Numpy的情况下运行,以便pip发现构建依赖
@@ -309,6 +315,15 @@
     'setuptools',
 ]

+# Chaquopy:参见build-libgcc.sh。
+if is_building() and os.environ["CHAQUOPY_ABI"] == "armeabi-v7a":
+    import subprocess
+    libgcc_name = "libgcc_numba.so"
+    subprocess.run([f"{os.environ['RECIPE_DIR']}/build-libgcc.sh",
+                    f"numba/targets/{libgcc_name}"], check=True)
+else:
+    libgcc_name = None
+
 metadata = dict(
     name='numba',
     description="使用LLVM编译Python代码",
     
@@ -337,13 +353,15 @@
         "numba.core.runtime": ["*.c", "*.h"],
         "numba.cext": ["*.c", "*.h"],
         # numba gdb钩子初始化命令语言文件
         "numba.misc": ["cmdlang.gdb"],
         "numba.typed": ["py.typed"],
+        "numba.targets": ["cmdlang.gdb"] + \
+            [libgcc_name] if libgcc_name else [],  # Chaquopy相关修改
     },
     scripts=["numba/pycc/pycc", "bin/numba"],
     url="http://numba.github.com",
     packages=packages,
-    setup_requires=build_requires,
+    # Chaquopy:移除setup_requires=build_requires
     install_requires=install_requires,
     python_requires=f">={min_python_version}",
     license="BSD",

构建日志

build-wheel: patch -p1 -i /home/default/Coding/chaquopy/server/pypi/packages/numba/patches/chaquopy.patch
正在修补文件 numba/core/caching.py
第1个Hunk在第159行成功应用(偏移-3行)。
第2个Hunk在第174行成功应用(偏移-3行)。
正在修补文件 numba/np/ufunc/parallel.py
第1个Hunk在第288行应用失败。
1个Hunk中1个失败——拒绝信息已保存到 numba/np/ufunc/parallel.py.rej
正在修补文件 numba/core/cpu.py
第1个Hunk在第50行成功应用(偏移-2行)。
正在修补文件 setup.py
第1个Hunk在第135行成功应用(偏移43行)。
第2个Hunk在第372行成功应用,模糊匹配度1(偏移57行)。

Rej文件内容

--- numba/np/ufunc/parallel.py  2020-01-29 15:21:49.000000000 +0000
+++ numba/np/ufunc/parallel.py  2020-02-08 22:41:35.162472017 +0000
@@ -288,6 +288,6 @@
     else:
         _backend_init_process_lock = _nop()
-    except OSError as e:
+except (OSError, ImportError) as e:  # Chaquopy:添加ImportError,RLock()会抛出该异常

     # 可能是缺少/dev/shm用于信号量写入,提示用户
     msg = (

内容的提问来源于stack exchange,提问作者tarlo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 01:59:52