使用pip安装faiss-cpu失败:Python3.12编译wheel时swig.exe报错
问题详情
在Windows系统的Python 3.12.0虚拟环境内执行pip install faiss-cpu,构建wheel阶段触发swig相关编译失败,错误输出如下:
error: subprocess-exited-with-error
× Building wheel for faiss-cpu (pyproject.toml) did not run successfully.
│ exit code: 1
╰─> [details of the error]
swig.exe -python -c++ -Doverride= -I/usr/local/include -Ifaiss -doxygen -DSWIGWIN -module swigfaiss -o faiss\faiss\python\swigfaiss_wrap.cpp faiss\faiss\python\swigfaiss.i
error: command 'swig.exe' failed: None
注:收到pip可升级至23.3.2的提示,暂未确认是否与此问题相关。
已完成的排查动作:
- 确认swig已安装且其路径已加入系统PATH,命令行执行
swig -version能正常返回版本信息 - 未更新pip、setuptools至最新版本
- 未检查该包是否依赖Visual C++ Build Tools及是否已正确安装
疑问:该问题是否与Python 3.12.0版本或其他系统配置有关?
解决建议
1. 升级pip与构建工具
先更新pip、setuptools和wheel,排除工具版本兼容问题:
pip install --upgrade pip setuptools wheel
2. 安装Visual C++ Build Tools
faiss-cpu在Windows下编译必须依赖Visual C++ Build Tools,需确保安装包含C++开发组件的版本:
- 打开Visual Studio安装程序,选择「桌面开发使用C++」工作负载
- 勾选「MSVC v142+工具集」「Windows SDK」等核心组件,完成安装后重启命令行和虚拟环境,再尝试安装
3. 验证swig版本兼容性
虽然swig -version可正常执行,但需确认swig版本为4.x系列(faiss对旧版swig兼容性较差),若版本过低,升级至最新稳定版。
4. 直接安装预编译wheel包
跳过本地编译,直接安装预编译版本:
pip install faiss-cpu --only-binary :all:
5. 确认虚拟环境的PATH配置
系统PATH已添加swig,但虚拟环境可能未继承该路径,激活虚拟环境后执行echo %PATH%检查swig路径是否存在,若缺失,临时添加后再安装:
set PATH=C:\你的swig安装路径\bin;%PATH%
内容的提问来源于stack exchange,提问作者MD Abdur Rahim

