Cygwin下pip安装scipy/numpy提示wheel平台不支持问题咨询
核心报错原因:你下载的*win_amd64.whl是为原生Windows系统的CPython编译的二进制包,和Cygwin环境下编译运行的POSIX兼容Python不兼容,不管是SciPy还是NumPy的这类Windows原生wheel都无法在Cygwin的Python环境中安装。
1. 正确查询pip支持的wheel标签的方法
旧版本pip的pip.pep425tags.get_supported()接口在pip 10及以上版本已经被移除,不需要再尝试导入模块查询,直接在Cygwin终端执行以下命令即可:
pip debug --verbose
命令输出拉到最底部的Compatible tags段落,列出的所有标签就是当前pip支持的wheel文件名标签,从上到下匹配优先级递减。
如果需要在Python代码内查询,可以使用以下内部接口(不推荐,pip版本迭代可能随时变动):
from pip._internal.utils.compatibility_tags import get_supported print([str(tag) for tag in get_supported()])
2. Cygwin环境安装SciPy的标准流程
不要使用网上下载的Windows原生wheel包,二选一即可:
- (最推荐,零兼容问题)用Cygwin官方包管理器安装:重新运行Cygwin的setup安装程序,在包列表里搜索勾选
python38-numpy、python38-scipy,安装程序会自动安装所有底层依赖(包括BLAS、LAPACK、Fortran运行库等),安装完成后直接就能import使用。 - (适合需要自定义编译版本的场景)用pip源码编译安装:先通过Cygwin setup安装编译依赖:
gcc-core、gcc-fortran、python38-devel、libopenblas-devel、liblapack-devel,安装完成后直接在终端执行pip install scipy,pip会自动拉取对应版本的源码包,本地编译完成后自动安装。
3. 适配Cygwin的SciPy安装包获取渠道
你提到的带none标识的wheel是跨平台纯Python包,SciPy包含大量C/Fortran编译的二进制扩展,不存在纯Python的通用wheel,网上流传的旧版本带none标识的包大多是早期打包不规范的产物,不适合新版本SciPy使用。
Cygwin环境的适配安装包只有两个可靠来源:
- Cygwin官方软件源内预编译的二进制包,通过setup程序直接安装,和你的系统、Python版本完全匹配;
- PyPI上的官方源码包,执行pip安装时会自动下载,不需要手动找资源。
第三方站点分发的win_amd64、manylinux等标签的wheel都不适配Cygwin环境,无需浪费时间查找。
4. cPython是否为必需依赖
不是必需依赖,且你通过pip install cPython安装的包和Python解释器本身没有关系。
Cygwin环境下通过setup安装的python38本身就是CPython实现(Python的官方C语言实现版本,也是最常用的Python版本),你从pip安装的cPython是第三方发布的无关占位包,对SciPy安装、运行没有任何作用,可以直接执行pip uninstall cPython卸载,避免后续环境冲突。
内容的提问来源于stack exchange,提问作者A. Gehani

