pip卡在running setup.py install是因为转为源码构建,需本地编译且无进度提示,易因系统依赖或网络等待静默卡住;升级pip和构建工具可绕过多数问题。

pip 卡在 Running setup.py install 是因为触发了源码构建
当你看到 Running setup.py install for xxx 或 Running setup.py bdist_wheel for xxx 时,pip 已放弃直接安装预编译的 wheel,转而下载源码、调用 setup.py 执行本地构建。这个过程本身不输出进度,且依赖系统环境,极易“静默卡住”。它不是 pip 坏了,而是进入了阻塞式子进程(比如 subprocess.run(['gcc', ...]))或网络等待(比如 setup.py 内部又去拉 Ruby/CMake/JS 依赖)。
升级 pip 和构建工具链能绕过多数卡点
旧版 pip(setup.py install;新版 pip 默认启用 build-backend(如 setuptools.build_meta),优先尝试更可控的 wheel 构建流程。
- 先升级 pip:
python -m pip install --upgrade pip - 再升级构建依赖:
python -m pip install --upgrade setuptools wheel build - 如果包含 C 扩展(如
opencv-python、cryptography),确认已装好对应编译器:
— Linux:sudo apt install build-essential(Debian/Ubuntu)或sudo yum groupinstall "Development Tools"(CentOS/RHEL)
— macOS:xcode-select --install
— Windows:安装Microsoft Visual Studio Build Tools(非完整 VS)
国内网络下 setup.py 常偷偷连外网,必须干预
很多包的 setup.py 不是纯本地脚本——它可能动态下载二进制依赖(如 pact-python 下载 Ruby)、调用远程 CMake 配置、甚至上报 telemetry。这些请求在国内常超时卡死,且 pip 不会打印出来。
- 强制使用国内镜像源:
pip install xxx -i https://mirrors.aliyun.com/pypi/simple/ - 若包内嵌了额外网络请求(如
frida、pact-python),需代理:pip install frida-tools --proxy='http://127.0.0.1:7890' - 更彻底的方式:下载源码后离线修改
setup.py,注释掉所有urllib/requests调用和自动下载逻辑(参考pact-python的修复方式)
有些包根本不能走 setup.py,得换安装策略
像 wxPython、PyQt5、部分 opencv-python 版本,官方早已提供平台专用 wheel。硬走 setup.py 不仅慢,还大概率失败——因为它们的构建脚本对 Python 版本、Qt 版本、系统 ABI 敏感度极高。
- 查 wheel 是否存在:
pip debug --verbose看支持的 tag,再访问 PyPI 页面 找匹配的.whl - 手动下载 wheel 安装:
pip install opencv_python-4.10.0.84-cp311-cp311-win_amd64.whl - 避免
--no-binary :all:这类强制源码选项,除非你明确要调试构建过程
setup.py 某行 subprocess.run() 或 urlopen() 的无声等待中。盯住进程树(ps aux | grep python)、检查网络代理状态、优先换 wheel——比干等半小时更有效。Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











