FreeBSD13.1下Python3.9虚拟环境pip安装Scipy失败
解决FreeBSD 13.1-RELEASE-p3上Python3.9虚拟环境安装Scipy的编译错误
方案1:使用FreeBSD pkg安装预编译包(推荐)
FreeBSD官方ports提供了预编译的scipy包,直接通过pkg安装可跳过编译环节,避免报错:
- 退出虚拟环境,执行系统级安装命令:
# pkg install py39-scipy - 若需在虚拟环境中使用,可将系统包链接到虚拟环境目录:
或者创建虚拟环境时添加(env)$ ln -s /usr/local/lib/python3.9/site-packages/scipy ./env/lib/python3.9/site-packages/--system-site-packages参数,直接继承系统已安装的Python包。
方案2:调整编译环境修复xsimd报错
如果必须通过pip编译安装,可尝试以下步骤:
- 安装编译依赖:
FreeBSD下编译Scipy需要gcc、线性代数库等依赖,先安装:# pkg install gcc12 openblas lapack py39-pythran - 指定gcc编译器:
默认clang对xsimd的部分函数支持存在问题,切换到gcc编译:(env)$ CC=gcc12 CXX=g++12 pip install scipy - 固定兼容版本的xsimd:
报错源于xsimd头文件的函数定义冲突,先安装适配FreeBSD的xsimd版本再安装Scipy:(env)$ pip install xsimd==8.1.0 (env)$ pip install scipy
临时应急方案(修改xsimd头文件)
若上述方法均无效,可临时修改编译环境中的xsimd头文件:
- 定位到报错文件(示例路径:
/tmp/pip-build-env-cfphp0hs/overlay/lib/python3.9/site-packages/pythran/xsimd/arch/xsimd_scalar.hpp) - 打开文件,找到涉及
exp10f和exp10的冲突代码块,替换为适配FreeBSD的定义:// 注释原有冲突代码,添加以下内容 namespace xsimd { inline float exp10(float x) { return ::exp10f(x); } inline double exp10(double x) { return ::exp10(x); } } - 重新执行
pip install scipy
内容的提问来源于stack exchange,提问作者argkh
相关产品推荐
相关产品推荐

