出错提示:
LLVM ERROR: Symbol not found: __svml_cosf8_ha
解决方法
在该项目目录下,搜索并删除所有的 __pycache__ 文件夹,包含子目录。
特别是 F:\heygem-win-50 目录下的相关缓存。
核心原因:CPU 指令集与 Numba 缓存的冲突
你遇到的 numba 库(HeyGen 用它来加速图像处理)有一个特性:它会将 Python 代码编译成机器码(JIT),并将结果**缓存**起来,以便下次启动更快。
1. **Docker 安装前:** 你的电脑直接运行在物理 CPU 上。Numba 第一次运行时,检测到你的 CPU 支持某些特定的 AVX/SVML 指令集,于是它编译了对应的机器码并**保存到了缓存文件(__pycache__ 或专用缓存目录)里**。
2. **Docker 安装后:** Docker 开启了 Hyper-V。现在,你的操作系统实际上运行在 Hypervisor 层之上。虽然还是同一个 CPU,但在底层,CPU 的某些指令集特性(特别是涉及到 Intel SVML 数学库的部分)在虚拟化模式下的表现或检测结果可能发生了微小的变化。
3. **冲突发生:** 当你再次启动项目时,Numba 读取了**旧的缓存文件**(那是为“物理模式”下的 CPU 编译的),但现在它正试图在“虚拟化模式”下调用这些特定的数学符号(如 __svml_cosf8_ha),结果发现底层的数学库链接不上了,或者指令集不匹配了,从而直接崩溃。
