pip坏了?从tar.gz源码包手动安装pip的完整指南
2026/9/14 10:16:01 网站建设 项目流程

简介:pip-21.0.1.tar.gz 是 Python 包管理器 pip 21.0.1 的源码压缩包,面向需要深入理解 pip 工作原理、离线安装 pip 或剖析其实现细节的 Python 开发者,也适用于搭建本地 Python 环境的运维人员。包体共 480 个文件,压缩后约 1.48MB,以 376 个 py 源码文件为主,构成 pip 的核心逻辑;另有 60 个 rst 文档、多个 license 与配置文件,以及少量 exe/pem/toml 等辅助文件,便于阅读文档、核对许可证和追溯构建信息。已有 686 人学习/下载。通过这份源码包,可以弄清楚 pip 如何与 PyPI 交互、如何解析依赖并完成包的安装/升级/卸载,也能看到 21.0.1 版本对 Python 3.9 的兼容性改进和更严格的安全证书校验处理;对想定制或二次开发 pip 的读者来说,目录结构清晰,是很好的源码级参考。

1. 当 pip 突然用不了,你手上只有这个 tar.gz

一个常见的尴尬场景:新装好的 Linux 服务器或者精简版 Python 环境里,pip命令一敲就报pip did not provide a command,或者 Windows 上弹fatal error in launcher: unable to create process using。查了半天发现是系统 Python 没带 pip,或者现有 pip 版本损坏。这时候,从 PyPI 拉一个pip-21.0.1.tar.gz下来手动安装,反而是最稳的解决办法。这个标题讨论的就是这么个事:拿到源码包之后,怎么在不用网络安装器的情况下把 pip 跑起来,以及跑起来之后怎么处理那些典型的坑。适合运维、Python 开发、以及任何需要离线或半离线环境安装 Python 包工具的人。重点是理解 tar.gz 源码包的安装原理,而不是盲目去跑setup.py install——版本、依赖、权限、路径,每一环都可能让安装功亏一篑。

2. 认识 pip-21.0.1.tar.gz:源码包的结构与安装原理

2.1 tar.gz 里到底是什么

pip-21.0.1.tar.gz不是可执行程序的压缩包,而是 Python 源码发行版(sdist)。用tar解压后,你会看到一个pip-21.0.1/目录,里面有pyproject.tomlsetup.pysetup.cfgsrc/pip/等文件。它的安装逻辑不是拷贝几个文件到系统目录,而是通过 Python 的打包工具把src/pip下的代码复制到 site-packages,并在 bin 目录(或 Scripts 目录)生成入口脚本。

这里有个关键点:pip 21.0.1 是较新的版本,它强制要求setup.py install使用setuptools>=44wheel。如果你直接用系统自带的旧版 setuptools 去跑python setup.py install,很可能报Setuptools is missing或者Invalid requirement。所以安装流程的第一步不是解压,而是检查环境里的setuptoolswheel版本。

2.2 为什么不能直接pip install ./pip-21.0.1.tar.gz

如果你当前环境里的 pip 已经坏了,这条命令自然也没法用。但哪怕 pip 还能跑,从 tar.gz 本地安装也有个隐藏问题:pip 在解析本地 sdist 时,会想把它构建成 wheel,这个过程需要wheel包和编译器。如果环境里没有wheel,会直接失败。所以在动手之前,先确认两条路:

  • 如果当前 Python 能运行,但没有 pip:用python -m ensurepip --upgrade先尝试系统自带的引导机制。它今天不生效,再走 tar.gz 安装。
  • 如果 ensurepip 也不可用:解压 tar.gz,用setup.pybuildinstall两步走。

2.3 解压命令和常见参数

获取到pip-21.0.1.tar.gz之后,第一件事是解压并检查文件完整性。一般执行:

tar -xzvf pip-21.0.1.tar.gz cd pip-21.0.1

-x表示解压,-z处理 gzip 压缩,-v显示过程,-f指定文件。如果你在 Windows 上,直接右键解压也行,但命令行里tar在 Windows 10 1803 之后已经内置。

解压后建议看一眼pyproject.toml,里面声明了构建依赖:

head -n 30 pyproject.toml

你会看到类似requires = ["setuptools>=44", "wheel"]的内容。注意这一点再继续,不会走冤枉路。

2.3.1 验证文件是否完整

从 PyPI 下载的 sdist 通常有 MD5 或 SHA256 校验值。强烈建议在解压前用sha256sum验证:

sha256sum pip-21.0.1.tar.gz

把输出的哈希值和 PyPI 页面上的值比对。如果不一致,说明下载过程损坏,后续安装会报未知错误。

3. 从源码包安装 pip:逐步命令与参数详解

3.1 最小安装流程(适用于 Linux/macOS)

在干净环境下,我一般这样操作:

python3 -m ensurepip --upgrade

如果这条命令成功,你就有能用的 pip 了,完全不需要 tar.gz。但很多精简系统会提示ensurepip is not available。此时用源码包:

tar -xzf pip-21.0.1.tar.gz cd pip-21.0.1 python3 setup.py build python3 setup.py install

这里的关键参数:

  • build:把源码构建成临时编译产物,处理依赖元数据。
  • install:把构建后的文件复制到 site-packages。

注意:setup.py install在 Python 3.12 以上已经被标记弃用,但 pip 21.0.1 本身的安装逻辑还不至于触发致命报错。如果你用的是 Python 3.11+,更推荐用python3 -m pip install .——前提是已经有一个能用的引导 pip。

3.2 指定安装路径:避免默认目录的权限问题

很多系统上,直接setup.py install会试图写入/usr/lib/python3/dist-packages/usr/local/lib/python3.x/site-packages,普通用户没有权限,会报 PermissionError。这时有两种应对:

  • --userpython3 setup.py install --user。这会装到~/.local/lib/python3.x/site-packages,但要注意~/.local/bin是否在 PATH 中,否则安装完pip命令还是找不到。
  • 指定--prefixpython3 setup.py install --prefix=$HOME/.local,效果类似,但更可控。

动态验证路径是否生效:

python3 -c "import sys; print(sys.path)"

3.3 安装后的入口脚本问题:pip 命令到底在哪

源码包安装完成后,pip 可执行文件在 Unix 上是/usr/local/bin/pip~/.local/bin/pip,Windows 上是Python安装目录\Scripts\pip.exe。如果终端输入pip提示 command not found,先确认这个路径是否在 PATH 中。

在 Linux 上临时添加:

export PATH=$HOME/.local/bin:$PATH

在 Windows 上,去“系统属性 - 环境变量”里把C:\Python39\Scripts或合适的路径加进去。这些问题都很常见,比如pip : 无法将“pip”项识别为 cmdlet、函数、脚本文件或可运行程序的名称,十有八九就是 PATH 不对。

3.4 常见报错及对策

报错信息原因处理方法
Setuptools is missingsetuptools 版本过低先升级 setuptools:python3 -m pip install --upgrade setuptools(如果 pip 可用),否则用easy_install或手动下载 setuptools sdist
The directory '/home/linux/.cache/pip/http' or its parent directory is not owned by the current user缓存目录权限问题mkdir -p ~/.cache/pip && sudo chown -R $USER ~/.cache/pip,或设置export PIP_CACHE_DIR=/tmp/pip-cache
fatal error in launcher: unable to create process usingWindows 上旧 pip 启动器损坏,或 Python 路径变动python -m pip uninstall pip后重新安装,或用python -m pip install pip==21.0.1覆盖
pip did not provide a command系统中有多个 Python,入口脚本名字冲突python3 -m pip代替pip,并检查which pip指向哪里

这些报错我基本每年都会遇到,大部分不是代码问题,而是环境问题。

4. 安装后的验证与换源:让 pip 真正可用

4.1 验证 pip 版本与完整性

安装完并不代表万事大吉。第一步验证:

python3 -m pip --version pip --version

如果python3 -m pip正常,而pip命令不正常,说明 PATH 问题。如果两个都不行,检查是否真的装进了当前 Python 环境:

python3 -c "import pip; print(pip.__file__)"

这个命令会显示 pip 模块的实际路径,能帮你定位是不是装错到了别的 Python 版本。特别注意:系统可能同时有/usr/bin/python3/usr/local/bin/python3,两者 site-packages 不同。

4.2 升级或降级到指定版本

你现在有了可用的 pip,如果目标本来就是安装旧版本(比如为了兼容某些遗留系统),可以执行:

python3 -m pip install pip==21.0.1

--upgrade参数会强制覆盖:

python3 -m pip install --upgrade pip==21.0.1

4.3 配置国内源:安装后续包不再卡顿

既然 pip 能运行了,下一步通常是想装别的包。默认 PyPI 源在国内速度不稳定,常见做法是配置清华源或阿里源。一行命令搞定:

python3 -m pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

这条命令会生成~/.config/pip/pip.conf(Linux)或%APPDATA%\pip\pip.ini(Windows)。查看当前配置用:

python3 -m pip config list

如果你想临时用某个源,不用改配置文件,直接命令行加参数:

python3 -m pip install requests -i https://mirrors.aliyun.com/pypi/simple/

-i指定 index-url,优先级高于配置文件。换源后常见报错会从超时变成Could not find a version that satisfies the requirement,那通常是包名写错或源里没有该版本,而不是网络问题。

4.4 非交互环境下的免确认安装

脚本化安装包时,避免 pip 停下来问确认。使用-y并没有这个参数,正确做法是传入--yes,但 pip 里也没有。实际你需要的是--no-input

python3 -m pip install --no-input some_package

该参数让 pip 在所有需要确认的场景下直接使用默认值,适合 CI/CD 和无人值守脚本。

5. 离线安装与虚拟环境中的 pip 使用技巧

5.1 把 pip 装到虚拟环境里

全局装的 pip 很容易和系统 Python 相互干扰。在实际项目中,我更喜欢为每个项目创建虚拟环境。从源码包安装 pip 到 venv 的方法:

python3 -m venv /path/to/venv /path/to/venv/bin/python /path/to/venv/bin/pip install --upgrade pip

但如果 venv 自带的 pip 也被删了,你可以把 tar.gz 复制到虚拟环境里,然后:

/path/to/venv/bin/python /path/to/venv/bin/pip install ./pip-21.0.1.tar.gz

前提是虚拟环境里的 pip 至少能跑。所以更稳妥的是在创建 venv 时就用--without-pip关掉,再用get-pip.py装,但那就偏离本标题的 tar.gz 研究了。这里记住一个原则:虚拟环境内部的 pip 要用虚拟环境的 python 调用,不要在激活 venv 后仍使用系统 pip。

5.2 离线安装依赖包的完整链路

有时你不仅需要 pip 本身,还得在没有外网的机器上装 requests、numpy 等。有了 pip 之后,在一台有网的机器上执行:

python3 -m pip download -d /tmp/packages -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

-d指定下载目录,-r指定需求文件。然后把/tmp/packages里的 whl 和 tar.gz 打包拷到目标机器,再:

python3 -m pip install --no-index --find-links=/path/to/packages -r requirements.txt

--no-index表示不从 PyPI 拉取,--find-links指定本地目录为唯一来源。注意:pip 21.0.1 在离线安装时只认带.whl的文件,遇到.tar.gz会尝试构建,但需要本地有编译链,所有依赖都得齐全。

5.3 用--target把包安装到自定义目录

不想污染 python 环境时,用--target很有效:

python3 -m pip install --target=/opt/myapp/libs requests

安装后,你的程序可以通过设置PYTHONPATH=/opt/myapp/libs来导入这些包。这个技巧在部署无依赖管理的 Python 脚本时非常实用,尤其是微服务里打包整个 app 目录。

5.4 快速验证 pip 是否影响系统安全

最后提一个容易被忽略的点:从 tar.gz 安装的 pip 不会自动配置当前用户的 PATH 缓存。如果你改了 PATH 还是找不到命令,可以查一下 shell 的哈希表:

hash -r

如果还是不行,直接which pip看结果。这一系列操作下来,pip-21.0.1.tar.gz就不再是一个神秘文件,而是被我们完整掌控的安装介质了。

本文还有配套的精品资源,点击获取

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

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

立即咨询