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
相关产品推荐
相关产品推荐

