Linux-Debian(armv7l)下通过pip安装Faiss-CPU失败问题
问题场景
在Linux-armv7l设备(如树莓派)上使用Python 3.10通过pip安装faiss-cpu,执行swig -version显示版本为3.0.12(满足faiss-cpu的版本要求),但安装时触发以下错误:
Traceback (most recent call last):
File "/home/pi/.local/bin/swig", line 5, in
from swig import swig
ModuleNotFoundError: No module named 'swig'
error: command '/home/pi/.local/bin/swig' failed with exit code 1
问题原因
报错路径/home/pi/.local/bin/swig是一个Python脚本,而非faiss编译所需的系统原生C++版swig二进制程序。你的PATH环境变量优先指向了这个Python版swig,导致安装过程调用了错误的程序。
解决步骤
确认系统原生swig的位置:
which swig正常输出应为系统路径(如
/usr/bin/swig),而非/home/pi/.local/bin/swig。临时调整PATH优先级,让系统swig先被调用:
安装faiss前执行以下命令,再重新运行pip安装:export PATH=/usr/bin:$PATH pip install faiss-cpu永久修复PATH优先级(可选):
编辑~/.bashrc或~/.profile文件,将系统swig所在路径(如/usr/bin)添加到PATH的最前端,例如:echo 'export PATH=/usr/bin:$PATH' >> ~/.bashrc source ~/.bashrc直接指定系统swig路径给pip:
如果不想调整PATH,可在安装时直接指定swig路径:pip install faiss-cpu --install-option="--swig=/usr/bin/swig"卸载冲突的Python版swig(若存在):
若你通过pip安装过Python版的swig包,直接卸载以避免冲突:pip uninstall swig卸载后重新执行
swig -version确认版本为系统原生版本,再尝试安装faiss-cpu。
内容的提问来源于stack exchange,提问作者Spleens

