2023年Windows 10系统下SciPy安装失败的解决求助
解决Windows 10下pip安装SciPy时的编译器错误问题
问题背景
执行pip install scipy(含--upgrade等变体,且pip已更新至最新版)时出现如下错误:
× Preparing metadata (pyproject.toml) did not run successfully. │ exit code: 1 ╰─> [13 lines of output] + meson setup --prefix=C:\users\w\appdata\local\programs\python\python38-32 C:\Users\w\AppData\Local\Temp\pip-install-bf55dgso\scipy_82bfcabbf1854ff981dec7247a79719c C:\Users\w\AppData\Local\Temp\pip-install-bf55dgso\scipy_82bfcabbf1854ff981dec7247a79719c\.mesonpy-wjzxo0cz\build --native-file=C:\Users\w\AppData\Local\Temp\pip-install-bf55dgso\scipy_82bfcabbf1854ff981dec7247a79719c\.mesonpy-native-file.ini -Ddebug=false -Doptimization=2 The Meson build system Version: 1.2.1 Source dir: C:\Users\w\AppData\Local\Temp\pip-install-bf55dgso\scipy_82bfcabbf1854ff981dec7247a79719c Build dir: C:\Users\w\AppData\Local\Temp\pip-install-bf55dgso\scipy_82bfcabbf1854ff981dec7247a79719c\.mesonpy-wjzxo0cz\build Build type: native build Project name: SciPy Project version: 1.10.1 Activating VS 16.3.9 ..\..\meson.build:1:0: ERROR: Compiler cl cannot compile programs. A full log can be found at C:\Users\w\AppData\Local\Temp\pip-install-bf55dgso\scipy_82bfcabbf1854ff981dec7247a79719c\.mesonpy-wjzxo0cz\build\meson-logs\meson-log.txt [end of output] note: This error originates from a subprocess, and is likely not a problem with pip. error: metadata-generation-failed
该问题根源在于Windows系统缺少适配的C++编译器,导致pip尝试从源码编译SciPy失败;原常用的第三方预编译包渠道已失效,以下为可靠的官方/官方维护渠道解决方案:
解决方案1:安装官方Microsoft Visual C++ Build Tools
这是解决Windows下Python编译依赖问题的官方标准方案:
- 从微软官方渠道下载并安装Microsoft Visual C++ Build Tools,安装时务必勾选「Desktop development with C++」工作负载,确保包含MSVC编译器、Windows SDK等核心组件。
- 安装完成后,重启终端(或直接打开Visual Studio提供的「开发者命令提示符」,该环境会自动配置好编译器相关的环境变量),再执行
pip install scipy即可。
解决方案2:使用Conda安装预编译包
Conda生态提供官方预编译的SciPy包,无需自行编译:
- 若已安装Anaconda或Miniconda,直接在终端执行
conda install scipy,Conda会自动处理所有依赖并完成安装。 - 未安装Conda的话,从官方渠道下载Miniconda(轻量版)完成安装后,再执行上述命令即可。
解决方案3:强制pip使用PyPI官方预编译Wheel包
目前SciPy在PyPI上提供了官方预编译的Windows二进制包,可强制pip优先使用这些包而非源码编译:
- 确保你的Python版本与预编译包兼容(注意32位/64位匹配,若使用32位Python需对应32位的预编译包)。
- 执行命令:
pip install scipy --only-binary :all:,该命令会强制pip从PyPI获取预编译的二进制包,跳过源码编译流程。
内容的提问来源于stack exchange,提问作者Will Will
相关产品推荐
相关产品推荐

