如何通过pip安装软件包时跳过C扩展编译?含可选扩展禁用方法
嘿,这俩问题我之前折腾包的时候也碰到过,刚好有现成的解决办法,给你拆解清楚:
1. 安装软件包时跳过所有C扩展构建
如果想让pip装包时完全不碰C扩展的编译,有几个实用的路子:
- 首选方法:给setup.py传递全局选项。很多遵循规范的包都支持
--no-extensions这个开关,直接这么装就行:pip install [你的包名] --global-option="--no-extensions" - 环境变量大法:有些包会监听通用的环境变量,比如
DISABLE_C_EXTENSIONS,装之前先导出这个变量,脚本会自动跳过扩展编译:export DISABLE_C_EXTENSIONS=true pip install [你的包名] - 兜底方案:如果碰到不支持上面选项的倔脾气包,可以临时把编译器设成无效命令,迫使构建脚本回退到纯Python版本(会有警告,但能用):
CC=false pip install [你的包名]
2. 针对特定包禁用可选C扩展(以markupsafe和subprocess32为例)
这类带可选扩展的包,一般都有自己专属的控制开关,比全局设置精准多了:
禁用markupsafe的_speedups扩展
markupsafe官方专门做了环境变量开关,装之前设置好就行,我平时都是这么干的:
MARKUPSAFE_NO_EXTENSIONS=true pip install markupsafe
也可以通过pip的安装选项传递参数,效果一样:
pip install markupsafe --install-option="--without-speedups"
禁用subprocess32的_posixsubprocess32扩展
subprocess32的逻辑类似,它会监听SUBPROCESS32_NO_EXTENSIONS这个环境变量,执行命令如下:
SUBPROCESS32_NO_EXTENSIONS=true pip install subprocess32
要是你想强制源码安装并跳过扩展,也可以这么写(不过上面的环境变量方法更简洁):
pip install subprocess32 --no-binary :all: --install-option="--without-extensions"
内容的提问来源于stack exchange,提问作者Łukasz Rogalski
相关产品推荐
相关产品推荐

