答案是pip-script.py文件损坏或版本错位导致调用失败;需检查该脚本是否仍使用已废弃的from pip._internal import main逻辑,若存在则应通过python -m ensurepip --upgrade --default-pip重生成正确入口脚本。

这个问题通常不是 pip 本身代码出错,而是你本地的 pip-script.py 文件损坏或版本错位,导致 Python 尝试把整个 pip 模块当函数调用 —— 所以报 TypeError: 'module' object is not callable。
为什么 pip-script.py 会触发 module not callable?
正常情况下,pip-script.py 是一个启动脚本,它通过 pkg_resources.load_entry_point() 去加载 pip 包里注册的 console script 入口(比如 pip==24.2 对应的 pip 函数)。但如果你的 pip-script.py 还停留在旧版逻辑(比如直接调用 from pip._internal import main; main()),而新版 pip 已移除 main() 函数,就会因找不到可调用对象而崩溃。
常见诱因包括:
- 用
python -m pip install --upgrade pip升级时中断或权限不足 - 手动删过
Scripts/下的文件,又没重建入口 - 混用 conda 和 pip 安装,导致
pip包和脚本不匹配 - Windows 上防病毒软件锁定并篡改了
pip-script.py
检查 pip-script.py 是否已损坏
进到你的 Python 安装路径下的 Scripts 目录(例如 C:\Users\name\AppData\Local\Programs\Python\Python311\Scripts\ 或 D:\Anaconda3\Scripts\),打开 pip-script.py 看内容:
❌ 错误模板(老式写法,已失效):
from pip._internal import main
if __name__ == '__main__':
sys.exit(main())
✅ 正确模板(带 load_entry_point 和版本号):
__requires__ = 'pip==24.2'
from pkg_resources import load_entry_point
if __name__ == '__main__':
sys.exit(load_entry_point('pip==24.2', 'console_scripts', 'pip')())
如果看到的是第一种,就说明脚本没随 pip 升级更新,必须重生成。
重装 pip 入口脚本(无需重装整个 pip)
别急着卸载重装 pip 包,只要修复入口即可。在管理员权限的 PowerShell 或 CMD 中执行:
- 先确认当前 pip 包是否完好:
python -c "import pip; print(pip.__version__)"—— 如果能输出版本号,说明包没问题,只是脚本断连 - 运行:
python -m ensurepip --upgrade --default-pip(推荐,原生支持,不依赖easy_install) - 若上步失败,再试:
python -m pip install --force-reinstall --no-deps pip(强制重装 pip 包,并触发脚本重建) - 最后验证:
pip --version应该立刻返回版本信息,不再报错
注意:不要用 easy_install pip,它早已弃用,且在较新 Python 中默认未安装,强行启用反而引入更多兼容问题。
避免再次踩坑的关键点
这个错误表面是 pip 崩了,根子在 Python 启动机制和包管理的耦合上。最容易被忽略的是:
- 永远不要手动编辑
pip-script.py—— 它是自动生成的,手改后下次升级必丢 - 在虚拟环境中出问题时,优先用
python -m pip而非裸pip命令,绕过脚本层直接调用模块 - Conda 用户尽量用
conda install pip更新 pip,而不是python -m pip install --upgrade pip,后者可能破坏 conda 的元数据一致性 - 某些国产杀毒软件会静默劫持
Scripts/下的 .py 文件,加白名单比反复修复更省事











