Windows下Python3.8安装coverage无C扩展,如何强制安装带C扩展版本?
我之前也踩过类似的坑,本质原因是pip在Python 3.8环境下没能找到匹配的预编译wheel包(带C扩展的版本),只能 fallback到源码编译(但默认没编译C扩展,导致性能拉胯)。下面给你几个靠谱的解决办法:
方法1:直接指定对应版本的wheel包安装
首先得确认你的Python 3.8是32位还是64位,打开命令行执行:
python3.8 -c "import struct; print(struct.calcsize('P') * 8)"
输出32就是32位,64就是64位。
然后找到对应Python 3.8的coverage预编译wheel包(比如coverage 5.0.3版本的话,对应文件名是coverage-5.0.3-cp38-cp38-win32.whl(32位)或coverage-5.0.3-cp38-cp38-win_amd64.whl(64位)),下载到本地后,用pip直接安装本地文件:
# 替换成你实际的文件路径 python3.8 -m pip install D:\downloads\coverage-5.0.3-cp38-cp38-win_amd64.whl
方法2:强制pip只使用预编译wheel包
用--only-binary参数让pip优先选择预编译的wheel包,不会 fallback到源码安装:
python3.8 -m pip install --only-binary :all: coverage
如果这个命令报错,说明当前PyPI上确实没有对应版本的wheel包,那你就需要用方法1手动找合适的wheel,或者升级coverage到有对应wheel的版本。
方法3:升级pip到最新版本(再确认下)
有时候旧版本的pip可能对新Python版本的wheel识别有问题,执行以下命令确保pip是最新的:
python3.8 -m pip install --upgrade pip
升级完成后再重新安装coverage:
python3.8 -m pip install coverage
方法4:手动编译C扩展(万不得已的方案)
如果上面的方法都不行,你可以自己编译C扩展版本。需要先安装Visual Studio Build Tools 2019(Python 3.8对应需要这个版本的编译工具),安装时勾选“C++构建工具”组件。
安装完成后,重新执行:
python3.8 -m pip install coverage
这时候pip会自动编译C扩展,生成带C加速的版本。
内容的提问来源于stack exchange,提问作者Andrew Gill

