(三)用 pip 安装与记录依赖
1. 把包装到当前解释器对应的环境
pip 负责安装 Python 分发包。下面用 HTTPX 做一个安装练习,后面的爬虫章节会真正使用它发送请求。先激活上一节的 .venv,执行:
# 让当前 python 运行自己的 pip,安装本示例使用的版本。
python -m pip install "httpx==0.28.1"
# 查看安装版本、依赖和实际安装位置。
python -m pip show httpx
# 列出环境中的包,并检查已安装包的依赖关系。
python -m pip list
python -m pip check
写 python -m pip,可以把安装动作明确交给当前解释器。单独输入 pip 时,终端会按 PATH 查找名为 pip 的程序;若它属于另一套 Python,就会把包装到另一个地方。
安装名称与导入名称也可能不同。例如 Beautiful Soup 的安装名称是 beautifulsoup4,Python 代码中使用的名称是 bs4。HTTPX 的两者恰好都是 httpx。
保存为 package_check.py 后运行:
# import 把现成模块引入程序,随后可以访问它提供的名称。
import httpx
# 点号从模块中取出版本信息,验证当前环境确实能导入这个包。
print(httpx.__version__)输出:
0.28.1
2. 版本范围与环境快照
指定 httpx==0.28.1,表示安装这个版本;httpx>=0.28,<0.29 表示接受范围内的版本。引号让终端把整个版本约束作为一个参数传给 pip。升级和卸载分别执行:
# 在指定范围内选择并升级 HTTPX。
python -m pip install --upgrade "httpx>=0.28,<0.29"
# 卸载 HTTPX;其他项目中安装的 HTTPX 不受这个环境的操作影响。
python -m pip uninstall httpx
# 为后面的复现练习重新装回示例版本。
python -m pip install "httpx==0.28.1"
当前环境安装的不只是 HTTPX,还包括它需要的其他包。可以把安装结果保存成快照:
# 把已安装分发包及版本保存到 UTF-8 文件,兼容不同 PowerShell 版本。
python -m pip freeze | Out-File -Encoding utf8 requirements.txt
macOS/Linux 中使用 python -m pip freeze > requirements.txt。文件中会出现 httpx==0.28.1 和其他包的版本记录。它描述的是这个环境当前安装了什么,不区分哪些是自己直接选择的依赖、哪些是间接安装的依赖。
建立另一个环境,用这份文件重装:
# Windows:另建一个环境,演示按依赖文件安装。
py -3.12 -m venv .venv-rebuild
.\.venv-rebuild\Scripts\python.exe -m pip install -r requirements.txt
# 用新环境运行同一文件,核对结果。
.\.venv-rebuild\Scripts\python.exe package_check.py
环境快照便于重装。项目中“需要什么”的声明、解析后的锁定记录以及环境中“已经装了什么”可以进一步分开管理,下面的 uv 路线会展示这个过程。pip freeze 文档
3. 包索引与安装排查
pip 默认从 PyPI 查找包。需要查看当前索引配置时,运行 python -m pip config list;下面演示为本次安装明确选择索引:
# 这一条命令从指定的 PyPI 索引安装包。
python -m pip install --index-url https://pypi.org/simple "httpx==0.28.1"
下载失败先看错误发生在哪一步:解析域名、连接服务器、查找版本,还是构建包。No matching distribution found 时,继续核对包名、Python 版本与系统平台对应的安装文件。ModuleNotFoundError 则从运行程序的解释器和 pip show 给出的安装位置查起。pip 使用指南