【BUG已解决】pip install 出现 error: Microsoft Visual C++ 14.0 or greater is required 解决方案
1. 问题描述
在 Windows 上使用 pip 安装某些包(尤其是包含 C/C++ 扩展的库,如 numpy 老版本、某些冷门库、需要本地编译的包)时报错:
> pip install some-package error: Microsoft Visual C++ 14.0 or greater is required. Get it with "Microsoft C++ Build Tools": https://visualstudio.microsoft.com/visual-cpp-build-tools/有时候错误信息会稍有不同,但核心都是提示缺少编译工具:
error: Microsoft Visual C++ is required. Get it from https://visualstudio.microsoft.com/downloads/这个报错专属于 Windows 平台——因为大多数 Python 包在 PyPI 上会预先编译好 Windows 的 wheel(.whl)二进制文件,但少数包(尤其小众库或较老的版本)只提供源码包(.tar.gz),安装时需要在本机现场编译 C 扩展代码,而 Windows 默认并不自带 C++ 编译器。
2. 原因分析
pip install 某个包 ↓ PyPI 上该包没有对应 Python 版本/系统架构 的预编译 wheel ↓ pip 退回到下载源码包,尝试本地编译 ↓ 本地编译需要调用 C++ 编译器(cl.exe,属于Visual Studio套件) ↓ Windows未安装该编译器 → 报错| 版本号 | 对应的 Visual Studio 版本 |
|---|---|
| MSVC 14.0 | Visual Studio 2015/2017/2019/2022(14.0是ABI版本号,2015后长期保持兼容) |
3. 解决方案
方案一:安装 Microsoft C++ Build Tools(推荐,只装编译器不装完整IDE)
无需安装完整的 Visual Studio,只需要安装其中的"生成工具"组件:
- 访问 Visual Studio Build Tools 下载页
- 下载并运行安装器
- 在组件选择界面,勾选"使用 C++ 的桌面开发"(Desktop development with C++)
- 确保右侧至少勾选:
- MSVC v143 - VS 2022 C++ x64/x86 生成工具
- Windows 10/11 SDK
- 点击安装(体积约 3-6GB,视勾选组件而定)
安装完成后重新打开终端(重要,需要让新的环境变量生效):
pip install some-package方案二:优先寻找预编译好的 wheel 包(避免本地编译)
很多包即使官方PyPI没有预编译wheel,社区维护者也会提供第三方预编译包:
# 【BUG已解决】查看PyPI页面是否真的没有Windows wheel # https://pypi.org/project/包名/#files # 部分老牌库可以从Christoph Gohlke维护的非官方wheel库下载(历史资源,现已归档但仍可用) # https://www.lfd.uci.edu/~gohlke/pythonlibs/ # 或者优先尝试用conda安装,conda生态对Windows预编译支持更好 conda install some-package方案三:使用 conda 代替 pip 安装(规避编译问题的有效途径)
conda 的软件仓库对 Windows 平台预编译支持通常比 PyPI 更完善,尤其是科学计算类库:
conda install -c conda-forge some-package方案四:确认是否真的需要该库的最新版本
有些老旧库版本要求编译,但升级到新版本后可能已经提供了预编译wheel:
pip install --upgrade some-package # 或者查看该库各版本发布记录,找到有wheel支持的版本 pip index versions some-package方案五:使用 WSL2(终极规避方案)
如果不想在 Windows 上折腾 C++ 编译环境,直接在 WSL2 的 Linux 子系统中进行 Python 开发,Linux 环境的编译工具链天然齐全:
# 在WSL2 Ubuntu中 sudo apt update sudo apt install build-essential python3-dev pip install some-package方案六:仅需要特定编译器组件时的精简安装
如果不想下载几个GB的完整Build Tools,可以尝试仅安装必需的最小组件(适合网络环境不佳、磁盘空间有限的场景):
# 使用离线安装器的命令行参数,仅安装C++工作负载(需先下载vs_buildtools.exe) vs_buildtools.exe --quiet --wait --norestart --nocache ` --add Microsoft.VisualStudio.Workload.VCTools ` --add Microsoft.VisualStudio.Component.Windows10SDK.190414. 各方案对比总结
| 方案 | 磁盘占用 | 适用场景 | 推荐指数 |
|---|---|---|---|
| 安装Build Tools | 3-6GB | 长期Windows Python开发 | ⭐⭐⭐⭐⭐ |
| 寻找预编译wheel | 无额外占用 | 只是想快速装上某个包 | ⭐⭐⭐⭐⭐ |
| 用conda安装 | 视包而定 | 已经在用conda环境 | ⭐⭐⭐⭐⭐ |
| 升级到新版本 | 无额外占用 | 库本身有更新的预编译版本 | ⭐⭐⭐⭐ |
| 使用WSL2 | 需要额外配置Linux子系统 | 频繁遇到Windows编译问题 | ⭐⭐⭐⭐ |
5. 常见问题 FAQ
5.1 安装了Build Tools后仍然报错
# 确认是否重新打开了新的终端窗口(环境变量PATH需要重新加载) # 关闭所有已打开的cmd/PowerShell/VSCode终端,重新打开 # 验证cl.exe是否可用 where cl如果where cl找不到,可能需要使用 "Developer Command Prompt for VS" 而不是普通终端:
开始菜单 → 搜索 "x64 Native Tools Command Prompt" → 在此终端中运行 pip install5.2 如何确认某个包是否需要编译
# 查看PyPI该包的Files页面,如果只有.tar.gz没有.whl,说明该版本没有预编译包 # 或者直接尝试安装观察报错信息中是否提及编译相关内容 pip install --no-binary :all: some-package # 强制走源码编译路径进行测试5.3 Python 版本与预编译wheel的对应关系
预编译wheel通常按 Python 版本(如 cp310 代表 CPython 3.10)和系统架构(win_amd64)命名:
numpy-1.26.0-cp310-cp310-win_amd64.whl ↑ ↑ ↑ 版本号 Python版本 系统架构如果你的 Python 版本太新(比如刚发布的 3.13),某些包可能还没来得及为该版本发布预编译wheel,这时只能等待官方更新或本地编译。
5.4 企业内网无法访问微软官方下载站怎么办
# 可以联系IT部门获取离线安装包 # 或使用国内镜像加速下载(部分云盘/镜像站会转存VS Build Tools安装包) # 另一个思路:申请一台能访问外网的机器下载后拷贝到内网使用5.5 M1/M2 Mac(ARM架构)是否也会遇到类似问题
Mac 上对应的报错通常是缺少 Xcode Command Line Tools:
xcode-select --install原理相同——都是缺少本地C/C++编译环境,只是不同平台需要安装的工具链不同。
5.6 Docker容器内构建镜像时如何避免此问题
在 Dockerfile 中提前安装好编译依赖:
FROM python:3.11-slim # Debian/Ubuntu基础镜像需要手动安装build-essential RUN apt-get update && apt-get install -y build-essential COPY requirements.txt . RUN pip install -r requirements.txt5.7 如何判断安装失败的根本原因是缺少编译器还是缺少SDK头文件
有时候即使装了 Build Tools,仍然报类似但更具体的错误,如缺少特定的 Windows SDK 头文件:
fatal error C1083: Cannot open include file: 'basetsd.h': No such file or directory在Visual Studio Installer中,确认已勾选对应版本的Windows SDK: Individual components → Windows 10 SDK (或 Windows 11 SDK,取决于系统版本)5.8 特定科学计算库(如scipy、scikit-learn)的官方预编译渠道推荐
对于常见的科学计算库,官方通常提供更可靠的安装渠道,避免走本地编译路径:
# scipy生态推荐优先使用conda-forge渠道,预编译覆盖更全面 conda install -c conda-forge scipy scikit-learn numpy pandas # 或者使用官方推荐的清华源加速下载已有的预编译wheel pip install scipy -i https://pypi.tuna.tsinghua.edu.cn/simple5.9 GitHub Actions等云端CI环境中如何配置Windows编译环境
# GitHub Actions Windows Runner 通常已经预装了必要的编译工具 runs-on: windows-latest steps: - uses: actions/checkout@v4 - name: Set up MSVC uses: microsoft/setup-msbuild@v2 - name: Install dependencies run: pip install -r requirements.txtGitHub 官方的windows-latest镜像默认已包含 Visual Studio Build Tools,通常不需要额外配置就能正常编译。
5.10 排查是否是32位/64位架构不匹配导致的连带问题
# 确认Python本身是32位还是64位版本 python -c "import platform; print(platform.architecture())" # 确认安装的Build Tools组件是否包含对应架构的编译目标 # 现代Python基本都是64位,确保勾选了 "MSVC v143 - VS 2022 C++ x64/x86 生成工具"5.11 团队标准化开发机镜像的长期方案
对于经常需要给新员工配置开发环境的团队,建议制作标准化的开发机镜像(Windows可用Packer/云厂商镜像模板),预装好Build Tools等常用组件:
# 使用Chocolatey等包管理器批量安装标准工具链,减少手动操作 choco install visualstudio2022buildtools -y choco install python312 -y choco install git -y新员工拿到预装好的开发机镜像后,几乎不会再遇到本文讨论的编译环境问题。
5.11.1 补充:ARM架构Windows设备(如Surface Pro X)的特殊兼容性问题
ARM架构的Windows设备在处理需要本地编译的Python包时,可能遇到比x86更复杂的兼容性问题,因为部分第三方库尚未提供ARM64版本的预编译wheel:
# 检查当前系统架构 python -c "import platform; print(platform.machine())" # ARM64设备遇到编译问题时,优先考虑使用x64模拟层运行Python,而非在原生ARM64环境中编译5.11.2 补充:GitHub Actions self-hosted Windows Runner的环境准备
如果团队使用自建的Windows CI Runner而非GitHub官方托管Runner,需要手动确保Build Tools已预装,否则每次CI构建都会重现本文讨论的问题:
# 在自建Runner的初始化脚本中提前安装好Build Tools choco install visualstudio2022buildtools --package-parameters "--add Microsoft.VisualStudio.Workload.VCTools" -y5.11.3 补充:Rust编写的Python扩展库(如某些新版加密库)的额外要求
部分现代Python库底层用Rust编写扩展模块,遇到编译问题时除了C++编译器,还可能需要Rust工具链:
# 安装Rust编译工具链 winget install Rustlang.Rustup # 重启终端后验证 rustc --version pip install some-rust-based-package5.11.4 补充:企业镜像分发系统中预置Build Tools的规模化方案
大型企业IT部门可通过SCCM等软件分发系统批量将Build Tools推送到所有Windows开发机,无需每个开发者手动下载安装,显著提升团队整体的环境搭建效率。
6. 排查清单速查表
□ 1. 确认报错的包名,查看PyPI是否有对应Windows wheel □ 2. 尝试用conda安装同一个包 □ 3. 尝试升级到该库的最新版本 □ 4. 下载安装 Visual Studio Build Tools(勾选"使用C++的桌面开发") □ 5. 安装完成后重新打开终端再试 □ 6. 长期在Windows做Python开发的,建议一次性装好Build Tools备用 □ 7. 频繁遇到编译问题,考虑迁移到WSL2开发环境7. 总结
Microsoft Visual C++ 14.0 or greater is required的核心是Windows 缺少本地 C/C++ 编译器,而目标包需要在本机编译。解决优先级:
- 先看是否有捷径——换用conda安装、升级到有预编译wheel的新版本
- 长期开发者——一次性装好 Visual Studio Build Tools(仅"C++桌面开发"组件),一劳永逸
- 频繁踩坑者——考虑转到 WSL2 或 Linux 环境做 Python 开发,从根本上规避 Windows 编译生态的种种限制
建议团队在 Windows 开发机的标准环境配置文档中,直接把 Build Tools 安装作为必装项写入,避免每个新成员都要单独排查一次这个经典问题。