Windows系统pip安装Python包失败(Ninja/CMake相关报错)
解决Windows下安装numpy/scipy/matplotlib时Ninja构建失败的问题
问题描述
在Windows系统上安装numpy、scipy、matplotlib等Python库时反复报错,执行pip install numpy这类命令均失败。Python和pip已更新到最新版本,且已添加至系统PATH。尝试过重装Python、安装CMake、切换库的旧版本等方法都无效,报错核心是Ninja的wheel构建失败,与CMake相关。
安装numpy时的报错输出(中文翻译)
D:\python311>pip install numpy 正在收集 numpy 使用缓存的 numpy-1.26.0.tar.gz (15.6 MB) 安装构建依赖... 完成 获取构建wheel的需求... 完成 安装后端依赖... 错误 error: subprocess-exited-with-error × 用于安装后端依赖的pip子进程未成功运行。 │ 退出代码: 1 ╰─> [32行输出] 正在收集 ninja>=1.8.2 使用缓存的 ninja-1.11.1.tar.gz (27 kB) 安装构建依赖: 开始 安装构建依赖: 完成,状态为'done' 获取构建wheel的需求: 开始 获取构建wheel的需求: 完成,状态为'done' 准备元数据(pyproject.toml): 开始 准备元数据(pyproject.toml): 完成,状态为'done' 为收集到的包构建wheel: ninja 为ninja构建wheel(pyproject.toml): 开始 为ninja构建wheel(pyproject.toml): 完成,状态为'error' error: subprocess-exited-with-error 为ninja构建wheel(pyproject.toml)未成功运行。 退出代码: 1 [9行输出] 回溯(最近的调用最后): 文件 "C:\Users\nishi\AppData\Local\Temp\pip-build-env-mrhvwz_r\overlay\lib\python3.10\site-packages\skbuild\setuptools_wrap.py", 第645行, 在setup中 cmkr = cmaker.CMaker(cmake_executable) 文件 "C:\Users\nishi\AppData\Local\Temp\pip-build-env-mrhvwz_r\overlay\lib\python3.10\site-packages\skbuild\cmaker.py", 第148行, 在__init__中 self.cmake_version = get_cmake_version(self.cmake_executable) 文件 "C:\Users\nishi\AppData\Local\Temp\pip-build-env-mrhvwz_r\overlay\lib\python3.10\site-packages\skbuild\cmaker.py", 第105行, 在get_cmake_version中 raise SKBuildError(msg) from err CMake安装存在问题,终止构建。CMake可执行文件是cmake [输出结束] 注意: 此错误源自子进程,大概率与pip无关。 ERROR: 构建ninja的wheel失败 构建ninja失败 ERROR: 无法为ninja构建wheel,而这是安装基于pyproject.toml的项目所必需的 [输出结束] 注意: 此错误源自子进程,大概率与pip无关。 error: subprocess-exited-with-error × 用于安装后端依赖的pip子进程未成功运行。 │ 退出代码: 1 ╰─> 查看上面的输出。 注意: 此错误源自子进程,大概率与pip无关。
详细报错输出(pip install --verbose numpy中文翻译)
D:\python311>pip install --verbose numpy 使用来自 C:\msys64\mingw64\lib\python3.10\site-packages\pip 的 pip 23.2.1 (python 3.10) 正在收集 numpy 使用缓存的 numpy-1.26.0.tar.gz (15.6 MB) 运行命令 pip 子进程以安装构建依赖 忽略 setuptools: 标记 'python_version >= "3.12"' 与你的环境不匹配 正在收集 Cython<3.1,>=0.29.34 从 https://files.pythonhosted.org/packages/03/e9/9cc0c4f0d8a566089d096254cd25168a0db02dd047863a7f995d8d3eefa7/Cython-3.0.2-py2.py3-none-any.whl.metadata 获取 Cython<3.1,>=0.29.34 的依赖信息 使用缓存的 Cython-3.0.2-py2.py3-none-any.whl.metadata (3.1 kB) 正在收集 pyproject-metadata>=0.7.1 使用缓存的 pyproject_metadata-0.7.1-py3-none-any.whl (7.4 kB) 正在收集 tomli>=1.0.0 使用缓存的 tomli-2.0.1-py3-none-any.whl (12 kB) 正在收集 colorama 使用缓存的 colorama-0.4.6-py2.py3-none-any.whl (25 kB) 正在收集 packaging>=19.0 (来自 pyproject-metadata>=0.7.1) 使用缓存的 packaging-23.1-py3-none-any.whl (48 kB) 使用缓存的 Cython-3.0.2-py2.py3-none-any.whl (1.2 MB) 安装收集到的包: tomli, packaging, Cython, colorama, pyproject-metadata 成功安装 Cython-3.0.2 colorama-0.4.6 packaging-23.1 pyproject-metadata-0.7.1 tomli-2.0.1 安装构建依赖... 完成 运行命令 获取构建wheel的需求 获取构建wheel的需求... 完成 运行命令 pip 子进程以安装后端依赖 正在收集 ninja>=1.8.2 使用缓存的 ninja-1.11.1.tar.gz (27 kB) 安装构建依赖: 开始 安装构建依赖: 完成,状态为'done' 获取构建wheel的需求: 开始 获取构建wheel的需求: 完成,状态为'done' 准备元数据(pyproject.toml): 开始 准备元数据(pyproject.toml): 完成,状态为'done' 为收集到的包构建wheel: ninja 为ninja构建wheel(pyproject.toml): 开始 为ninja构建wheel(pyproject.toml): 完成,状态为'error' error: subprocess-exited-with-error 为ninja构建wheel(pyproject.toml)未成功运行。 退出代码: 1 [9行输出] 回溯(最近的调用最后): 文件 "C:\Users\nishi\AppData\Local\Temp\pip-build-env-a04oa8_d\overlay\lib\python3.10\site-packages\skbuild\setuptools_wrap.py", 第645行, 在setup中 cmkr = cmaker.CMaker(cmake_executable) 文件 "C:\Users\nishi\AppData\Local\Temp\pip-build-env-a04oa8_d\overlay\lib\python3.10\site-packages\skbuild\cmaker.py", 第148行, 在__init__中 self.cmake_version = get_cmake_version(self.cmake_executable) 文件 "C:\Users\nishi\AppData\Local\Temp\pip-build-env-a04oa8_d\overlay\lib\python3.10\site-packages\skbuild\cmaker.py", 第105行, 在get_cmake_version中 raise SKBuildError(msg) from err CMake安装存在问题,终止构建。CMake可执行文件是cmake [输出结束] 注意: 此错误源自子进程,大概率与pip无关。 ERROR: 构建ninja的wheel失败 构建ninja失败 ERROR: 无法为ninja构建wheel,而这是安装基于pyproject.toml的项目所必需的 error: subprocess-exited-with-error × 用于安装后端依赖的pip子进程未成功运行。 │ 退出代码: 1 ╰─> 查看上面的输出。 注意: 此错误源自子进程,大概率与pip无关。 完整命令: 'C:\msys64\mingw64\bin\python.exe' 'C:\msys64\mingw64\lib\python3.10\site-packages\pip\__pip-runner__.py' install --ignore-installed --no-user --prefix 'C:\Users\nishi\AppData\Local\Temp\pip-build-env-ikxu5dzv\normal' --no-warn-script-location --no-binary :none: --only-binary :none: -i https://pypi.org/simple -- 'ninja >= 1.8.2' 当前工作目录: [继承] 安装后端依赖... 错误 error: subprocess-exited-with-error × 用于安装后端依赖的pip子进程未成功运行。 │ 退出代码: 1 ╰─> 查看上面的输出。 注意: 此错误源自子进程,大概率与pip无关。
解决方案
1. 确保CMake正确安装并添加到系统PATH
- 下载对应Windows版本的CMake安装包,安装时勾选**"Add CMake to the system PATH for all users"或"Current user"**选项。
- 安装完成后,打开新的命令提示符,执行
cmake --version验证是否能正常输出版本信息。若提示找不到命令,手动将CMake的bin目录(如C:\Program Files\CMake\bin)添加到系统环境变量PATH中。
2. 手动预安装Ninja
- 方法一:直接使用预编译二进制文件
- 下载Windows版本的Ninja压缩包(如
ninja-win.zip)。 - 解压后将
ninja.exe放到已在PATH中的目录(如Python的Scripts目录、C:\Windows\System32)。 - 验证:执行
ninja --version,确认能正常输出版本。
- 下载Windows版本的Ninja压缩包(如
- 方法二:安装预编译wheel
pip install ninja --only-binary :all:
3. 强制使用预编译的Python库wheel
科学计算库大多提供预编译的wheel包,无需本地构建。执行安装命令时添加参数强制下载预编译版本:
pip install numpy scipy matplotlib --only-binary :all:
4. 检查Python环境冲突
从报错路径看,当前使用的是MSYS2环境下的Python,可能与原生Windows Python冲突:
- 卸载MSYS2中的Python,改用官方原生Windows Python。
- 执行
where python,确认输出的是官方Python路径(如C:\Python311\python.exe)。
5. 清理缓存后重新安装
- 清理pip缓存:
pip cache purge - 重新执行安装命令:
pip install numpy scipy matplotlib --only-binary :all:
内容的提问来源于stack exchange,提问作者Nobuya
相关产品推荐
相关产品推荐

