报错“Microsoft Visual C++ 14.0 or greater is required”本质是缺少C++构建工具链,应安装Microsoft C++ Build Tools而非完整VS;推荐优先用conda安装预编译包,或下载匹配的.whl文件直接安装。

pip install 报错“Microsoft Visual C++ 14.0 or greater is required”
这是 Windows 上最典型的 C 扩展编译失败提示,本质是 Python 包里含 .c 或 .cpp 源码,需要本地编译器参与构建。不是缺 Python,是缺能干活的 C++ 构建工具链。
- 别急着装完整 Visual Studio —— 它又大又慢,多数时候纯属浪费
- 直接下载安装 Microsoft C++ Build Tools(免费独立版),勾选 “CMake tools for Visual Studio” 和 “Windows 10/11 SDK” 即可
- 安装完必须重启终端(CMD/PowerShell/VS Code 终端),否则环境变量不生效,
cl.exe仍不可见 - 验证是否成功:在新终端运行
cl,看到 Microsoft 版本信息就对了;如果报“不是内部或外部命令”,说明路径没加载
用 conda 替代 pip 安装含 C 扩展的包
conda 自带预编译二进制,绕过本地编译,对 NumPy、SciPy、Pillow、lxml 这类“C 库大户”特别管用。不是所有包都支持,但主流科学计算生态基本覆盖。
- 优先试
conda install package_name,比如conda install lxml,比pip install lxml稳得多 - 如果只用 pip 虚拟环境,可以临时切 conda:新建
conda create -n pyenv python=3.11,再conda activate pyenv,然后装 - 注意 channel:某些包(如
pyarrow)在默认源里版本旧,加-c conda-forge更可靠,例如conda install -c conda-forge pyarrow - conda 和 pip 混用有风险:conda 管理的依赖可能被 pip 覆盖,导致 ABI 不匹配,尤其涉及 OpenMP、zlib 等底层库时
安装 wheel 失败但提示“failed building wheel for xxx”
这说明 pip 尝试从源码构建失败,但其实你本可以跳过这步——只要找到对应平台的预编译 .whl 文件。
让 macOS 自动化像说话一样简单 —— 用代码控制你的 Mac,无需学习 AppleScript 系统要求 macOS 14+ (Sonoma) Python 3.9+ 需要开启:辅助功能 + 屏幕录制权限
- 去 Gohlke 的非官方 wheel 仓库 搜索包名,下载匹配你 Python 版本(如 cp311)、系统架构(win_amd64 / win_arm64)、位数(32/64)的
.whl文件 - 用
pip install xxx‑1.2.3‑cp311‑cp311‑win_amd64.whl直接安装,不触发编译 - 注意:这种 wheel 是社区维护,不保证长期更新,生产环境慎用;开发/测试阶段救急非常有效
- 如果连 wheel 都找不到,说明该包在 Windows 上确实没提供二进制分发(比如某些小众 Rust-Python 混合项目),那就只能回头配好 Build Tools 再试
PyPI 包声明了 build-system 但 still fails on Windows
现代包用 pyproject.toml 声明构建依赖(如 setuptools + wheel + cython),但 Windows 下常卡在 subprocess.CalledProcessError 或找不到 vcvarsall.bat。
立即学习“Python免费学习笔记(深入)”;
- 手动激活 VC 环境再运行 pip:
"C:\Program Files\Microsoft Visual Studio\2022\BuildTools\VC\Auxiliary\Build\vcvars64.bat" && pip install package_name - 升级构建工具链:
pip install --upgrade setuptools wheel build,老版本 setuptools 对 PEP 517 支持不全 - 某些包(如
rust-python绑定)还依赖cargo,得额外装 Rust 工具链,并确保cargo在 PATH 中 - 最隐蔽的坑:杀毒软件或 Windows Defender 实时扫描会锁住临时编译目录,导致
PermissionError: [WinError 32],临时禁用扫描再试

















