pip安装scipy时如何将外部系统依赖库添加至搜索路径
核心原因
你之前使用--global-option报错,以及openblas查找失败的核心逻辑如下:
--global-option参数会强制pip禁用所有预编译wheel包,强制走全源码构建流程,且参数仅会传递给scipy本身的构建脚本,不会作用在前置构建依赖的安装阶段,直接导致第一步Installing build dependencies阶段参数不兼容报错- scipy构建阶段的链接器默认扫描系统库路径和Python安装路径下的lib目录,不会主动识别Guix用户Profile下的私有库路径,因此找不到你已经安装的openblas
解决方案
方案1:通过环境变量指定搜索路径(优先推荐,不会影响wheel安装逻辑)
安装前先把Guix的库、头文件、pkg-config路径注入到构建环境的对应变量中,不要附加--global-option类参数,直接正常安装即可:
# 注入编译、链接、pkg-config搜索路径 export LDFLAGS="-L$HOME/.guix-profile/lib ${LDFLAGS}" export CFLAGS="-I$HOME/.guix-profile/include ${CFLAGS}" export PKG_CONFIG_PATH="$HOME/.guix-profile/lib/pkgconfig:${PKG_CONFIG_PATH}" # 可选:配置运行时库搜索路径,避免安装后导入scipy时报找不到openblas export LD_LIBRARY_PATH="$HOME/.guix-profile/lib:${LD_LIBRARY_PATH}" # 执行常规安装 python3 -m pip install --user scipy
如果上述操作后仍然提示找不到openblas,可以额外添加scipy构建流程专门识别的环境变量,直接指定openblas安装根目录:
export OPENBLAS="$HOME/.guix-profile" python3 -m pip install --user scipy
方案2:新版pip用config-settings传构建参数(不触发wheel禁用)
如果你使用的是22.2及以上版本的pip,不要使用已经废弃的--global-option,改用--config-settings向构建后端传递参数,不会强制禁用预编译wheel:
python3 -m pip install --user scipy \ --config-settings="compile-args=-L$HOME/.guix-profile/lib" \ --config-settings="link-args=-L$HOME/.guix-profile/lib"
方案3:关闭构建隔离适配Guix环境
如果前两种方案仍然在构建依赖阶段报错,可以临时关闭pip的隔离构建机制,直接复用你当前Guix环境中已经安装的构建依赖,避免隔离环境无法读取用户路径的问题:
- 先通过Guix安装scipy构建所需的前置依赖:
guix install python-setuptools python-wheel cython openblas pkg-config - 提前配置好方案1中提到的所有环境变量
- 执行无隔离安装命令:
python3 -m pip install --user --no-build-isolation scipy
内容的提问来源于stack exchange,提问作者bbb ee
相关产品推荐
相关产品推荐

