☰
pip install报错Microsoft Visual C++ 14.0 required?详解C++编译器与Build Tools安装
2026/9/26 7:53:23 网站建设 项目流程

玩Python的朋友,几乎都会在某个深夜撞上这堵墙:pip install一个包,装到一半,屏幕突然甩出一行冷冰冰的英文——error: Microsoft Visual C++ 14.0 or greater is required. Get it with "Microsoft C++ Build Tools"。

我第一次遇到它,是在装psycopg2的时候。当时心里咯噔一下,第一反应是“我缺Python运行库?”,于是满世界找“VC++运行库”下载,装了好几个版本,回来重新执行安装,照样报错。后来才明白,这个报错说的是“你现在没有C++编译器”,而不是“你缺运行环境”。这两个概念差了十万八千里。这篇文章就围绕这个报错,把来龙去脉、正确解法、后续可能遇到的新坑,一次性讲透。


1. 数字背后的含义:14.0不是你想的那个“版本号”

1.1 报错原文逐句拆解

先把报错原文完整贴出来:

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/

很多新手看到“Microsoft Visual C++ 14.0”会以为这是某个软件版本号,于是去下载“Visual C++ 2015”甚至更老的运行库。实际上,这里的14.0指的是MSVC编译器的工具集版本号,它不是产物版本,而是工具链标识。MSVC从Visual Studio 2015开始,编译器主版本号就是14.0;Visual Studio 2017对应14.1x,2019对应14.2x,2022对应14.3x。所以报错里那句“14.0 or greater”,翻译过来就是“你的电脑上需要一个MSVC 2015或更高版本的C++编译工具链”。

这里有个非常容易混淆的点:Python生态里的这个报错只关心MSVC的版本是否≥14.0,跟你是否安装过VC++ 2010、2013这些老运行库没有关系。很多老教程让用户装“VC++ 2015 Redistributable”,结果装完之后问题依旧,原因就在这——Redistributable是运行时,Build Tools是构建工具,两者根本不是一码事。

1.2 为什么pip安装包会突然要C++编译器

要理解这个报错,得先知道pip安装Python包的机制。绝大多数第三方包在PyPI上有两种分发格式:wheel(.whl)和source distribution(sdist,.tar.gz)。wheel是预编译好的二进制包,下载下来解压就能用,不需要本地编译;sdist是源代码包,pip拿到它之后,需要在你机器上调用C++编译器把C/C++扩展编译成当前Python版本可加载的模块。

正常情况下,pip会优先选择wheel安装。但情况不总是这么理想:

  • 某些冷门包没有发布对应Python版本或对应操作系统的wheel
  • 某些包的wheel仅包含纯净Python代码,但安装时需要编译C扩展
  • 某些项目在依赖解析时强制使用源码安装
  • Windows + 新Python版本,PyPI尚未及时收录对应wheel

只要pip决定走源码编译路线,它就会在Windows上寻找MSVC编译器。找不到,就抛出你看到的那句报错。简而言之,这个报错的触发点不是“运行库损坏”,而是“系统里根本没有编译工具链”。

1.3 哪些包最容易触发这个报错

不是所有包都会让你装Build Tools。纯Python写的包(比如requests、flask、click)根本不需要编译,走的是纯wheel,永远不会报这个错。容易触发的是带C扩展的程序包:

  • psycopg2、psycopg2-binary混用
  • lxml、bcrypt、cryptography、gevent、greenlet
  • pandas、numpy、scipy(多数情况有官方wheel,但源码构建非常常见)
  • jq、pycurl、pymssql、pyodbc
  • 某些从GitHub直接pip install git+...安装的库

我自己统计下来,网络相关、数据库驱动、XML解析、加密算法这四类库最容易踩中。遇到它们时,装好Build Tools几乎是一劳永逸的办法——以后装任何需要编译的包,都不用再被这堵墙卡住。


2. 大多数人卡住的一步:装完运行库仍然报错的真实原因

2.1 运行库与构建工具的区别:车和修车工具的关系

打个比方:VC++运行库(Redistributable)相当于一辆车的备用配件,它能保证引擎运转平滑,但不会给你一个修车工具箱;Microsoft C++ Build Tools相当于全套修车工具,里面有扳手、螺丝刀、引擎诊断仪,也就是实际的编译器、链接器、头文件。

pip install那个报错要的是“修车工具”。你光给它一副全新配件,它压根没法用。你运行一个已编译好的EXE、DLL,需要的是运行库;你要在本地把C源码编译成DLL,需要的是编译器整套工具链。这两件事完全不在一个层次。

2.2 为什么网上的“VC++运行库大礼包”无效

搜索引擎搜“Microsoft Visual C++”,前排链接大概率是各类“运行库合集”“2010-2022一键安装”的帖子。它们确实有用,但解决的是另一类问题——提示“缺少msvcp140.dll”“vcruntime140.dll”这种运行时缺失。而我们遇到的报错,关键字是required(需要),不是missing(缺失)。它需要的是一个编译器存在,而不是某个DLL存在。

判断自己是不是装错了,有一个极其简单的办法:打开命令行,输入:

where cl.exe

如果输出提示找不到文件,说明系统里根本没有MSVC编译器。此时你装再多的Redistributable,都不可能让pip满意。

2.3 别把“Build Tools”和“Visual Studio IDE”混为一谈

另外一点:部分老教程让用户安装“Visual Studio Community”整个IDE,这也是可行方案,但属于“杀鸡用牛刀”。

Visual Studio IDE体积巨大,安装包动辄几个GB,还会带一堆用不到的组件。微软官方其实专门提供了一个精简版工具集,叫“Microsoft C++ Build Tools”,它只包含命令行编译器、链接器、必要的头文件和库,没有图形界面,没有IDE,体积小很多。这个工具集才是解决我们当前报错的正解。


3. 动手安装:Build Tools的下载、勾选与验证全流程

3.1 下载入口与版本选择

进入微软官方网站:

https://visualstudio.microsoft.com/visual-cpp-build-tools/

页面里通常有两个下载按钮:一个是“Download Build Tools”,另一个是“下载Visual Studio”。务必选前者。下载下来的文件名一般是vs_BuildTools.exe,体积不大,它是一个引导安装器,真正的组件会在安装时连网下载。

这里我先说明一下:不要因为自己的Python是32位,就觉得要选32位工具链;更不要看到“14.0 or greater”就去找老版本。直接安装默认的MSVC v143(对应VS 2022)即可。Python官方给出的所有常见版本,从3.5到3.13,都兼容MSVC v143生成的二进制。

3.2 安装时的工作负载勾选

双击运行vs_BuildTools.exe后,会进入Visual Studio Installer的界面。关键在于加载“工作负载”(Workloads)这一步:

  • 勾选右栏第1个:使用C++的桌面开发(Desktop development with C++)
  • 在右侧“安装详细信息”中,默认会勾上:
    • MSVC v143 - VS 2022 C++ x64/x86生成工具
    • Windows 10/11 SDK
    • 适用于最新v143构建工具的C++ CMake工具(可选)
  • 其他选项如“C++分析工具”“测试工具核心功能”可全部取消勾选,它们和pip编译没有直接关系

这里最容易踩的坑是:只勾了“使用C++的桌面开发”这个大项目,没有留意右侧细节,导致安装时漏掉了实际需要的MSVC编译器组件。建议安装前,在“单个组件”选项卡里搜索MSVC v143,确认x64/x86生成工具在勾选状态。

点击“安装”后,整个过程大约需要5~15分钟,取决于网速和磁盘速度。安装完成后,务必关闭所有命令行窗口,重新打开一个,否则环境变量不会刷新。

3.3 安装完成后的验证方法

重新打开命令行,执行:

cl.exe

如果安装正确,会输出:

Microsoft (R) C/C++ Optimizing Compiler Version 19.xx.xxxxx for x64

再次执行where cl.exe,也能看到类似这样的路径:

C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\VC\Tools\MSVC\14.xx.xxxxx\bin\Hostx64\x64\cl.exe

看到这个路径,说明Build Tools已经成功接入系统。这时候再回去执行之前失败的pip install,绝大多数情况下就能顺利通过编译,安装完成。


4. 安装之后的新问题:cl.exe找不到、pip版本过旧与常见截胡

4.1 装好了却还是报错?先思考环境变量

有朋友反馈,明明装了Build Tools,cl.exe也能手动找到,但pip install还是报同样的错误。这类情况50%以上是环境变量没刷新或者在原来的命令行窗口里继续执行。Windows下,VS Installer会把vcvarsall.bat等脚本写入系统,但已打开的命令行窗口不会自动加载最新环境变量。最简单有效的操作:关掉所有终端(包括IDE内嵌终端),重新开一个。

如果新终端里执行cl仍然提示找不到,但你知道它在哪个路径,可以用CD进入编译器目录手动执行,确认能运行。更推荐的是安装后重启一次会话,或者在当前窗口执行:

call "C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\VC\Auxiliary\Build\vcvars64.bat"

它能手动加载当前终端的VC环境变量。加载后再执行pip install,基本必过。

4.2 旧版本Python、pip版本与新工具链的关系

第二个高频坑是pip版本过旧。老版本pip在解析源码包时,可能无法正确识别新MSVC工具链的版本信息,即使编译器已经存在,它也会误判并拒绝编译。

安装后建议先升级pip:

python -m pip install --upgrade pip

如果你用pip3而不是pip,注意先确认当前Python路径是预期版本。另外,Python 3.8以下的老版本,官方虽然声称支持VS2015以上的编译器,但实际编译部分高版本C扩展源码时,会因为C++标准问题失败。这种场景下,最快的方式不是继续跟编译器较劲,而是升级Python版本,或者改用第5章提到的conda路线。

4.3 已经装了VS IDE,为什么还是编译失败

不少开发者机子上装了Visual Studio Community。但注意两点:

  • 如果安装VS时**没有勾选“使用C++的桌面开发”**工作负载,只有.NET或其他组件,那你的系统里依然没有cl.exe
  • 即使勾选了,也可能因为环境变量未刷新而被pip无视

此时在Visual Studio Installer中修改安装,补上“使用C++的桌面开发”,然后重启终端即可。在VS和Build Tools同时存在的情况下,cl.exe版本可能存在多个,PATH里先出现哪个就会用哪个。通常这个差异影响不大,但如果后续编译报“版本不匹配”,可以考虑在终端里手动执行相应版本的vcvars64.bat来统一环境。

4.4 编译中途的额外报错:不要慌着重装

Build Tools装好之后,pip install可能还会出现fatal error C1083: Cannot open include file、LNK1104: cannot open file python39.lib这类编译错误。这时的问题往往不在编译器,而在于:

  • CPython开发头文件缺失(某些源码包需要python-dev,Windows下通常已内置在Python安装目录中)
  • 缺少第三方依赖库(比如编译lxml需要libxml2,编译pillow需要zlib)
  • 磁盘权限不足,无法写入临时编译目录

遇到这种报错,先看Include和LNK的具体文件名,再针对性补齐。绝大多数情况下,不要盲目重装Build Tools,那只会浪费时间。


5. 绕过编译器的三条活路:conda、wheel与Linux/macOS的等价操作

5.1 为什么conda几乎遇不到这个报错

如果你是数据分析方向的,强烈建议改用conda(Anaconda/Miniconda)管理环境。conda install和pip install的工作机制完全不同:conda从conda-forge等渠道拉取的是预编译二进制的conda包,里面已经包含编译好的.pyd/.so文件,根本不需要本地C++编译器。

我自己电脑是Windows,装pandas这类大型科学计算库时,pip install偶尔会触发源码编译,换成conda install,几秒钟就装好了,全程安静得像什么都没发生。所以,如果条件允许,优先用conda装带C扩展的库,直接绕开整条编译链路。

5.2 Linux/macOS上的对应报错和等价方案

这个报错不是Windows专属,Linux/macOS也有类似教训:

  • Linux上会报gcc: command not found或error: command 'gcc' failed with exit status 1
  • macOS上会报xcrun: error: invalid active developer path...(经典地需要安装Xcode Command Line Tools)

等价解法分别是:

# Debian/Ubuntu 系 sudo apt install build-essential python3-dev # macOS xcode-select --install

原理与Windows版一致——机器上缺编译链。装了以后,pip install该编译的就能正常编译了。在Linux/macOS下,也可以优先考虑wheel或conda,避免每次都要编译。

5.3 找“预编译wheel”这里有一个简单判断逻辑

并不是所有包都值得你去折腾编译器。遇到报错时可以先去PyPI页面上看该包的文件列表:

  • 如果存在xxx-cp39-cp39-win_amd64.whl这类的文件,说明官方已经为Python 3.9 + Windows 64位准备了预编译包
  • 报错往往说明:当前Python版本太新(比如3.13还没有官方wheel),或者你的平台架构特殊(比如32位Python)

一个实用命令:

pip install --only-binary :all: 包名

它能强制pip只使用wheel,禁止尝试源码编译。如果这个命令顺利跑完,说明你之前缺的是wheel而不是编译器,问题另有蹊径;如果它直接报“找不到满足要求的版本”,那就说明确实没有wheel可选,才需要走编译路线。

顺带一提,一些开源项目还提供“非官方预编译wheel”,作者会为最新的Python版本或特殊平台提前编译好二进制包。使用这类来源时,注意核对包名、Python版本、系统架构是否匹配,并留意信誉。


6. 个人实践中的几点体会

这个报错我前前后后见过几十次,最后总结下来,每个人的解法其实相差不大:装Build Tools的装Build Tools,换conda的换conda。区别在于能不能一次趟过,少走弯路。

几点实在建议:

  • 装好Build Tools之后,尽量保持安装包常驻。以后升级Python版本、装新库,再遇到编译需求,已经不用再报错。
  • 看到任何关于“VC++ 201X”的报错,先搞清楚是谁需要的。如果是pip install,它要的是编译器;如果是双击运行程序提示缺msvcp140.dll,它要的是运行库。两者别混。
  • 如果某个包实在编译不过,不要死磕。上PyPI或者conda-forge找找有没有更适合当前平台的预编译版本,往往五分钟内解决问题。没有人规定所有包都必须从源代码现场编译。
  • Windows上的Python开发,补一个vcvars64.bat调用习惯,对排查编译类问题有奇效。遇到环境变量相关的疑难杂症,先手动call它,再执行原命令,很多问题当场就消失了。

希望这篇文章能帮你把这堵“14.0 or greater”的墙拆掉,以后Python装包的路顺畅一些。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询