首页/Python 与数据实践/依赖管理与第三方库
Python 与数据实践 · 第 17 章

依赖管理与第三方库

标准库管的是"通用到人人都需要"的那部分需求,但你手头的具体工作——调一个大模型接口、解析一种冷门数据格式、画一张统计图——大概率早就有人写成库挂到网上了。Python 最厚的护城河就是这片第三方生态,而用好它靠三样基本…

约 8 分钟3,122 字14 个代码示例

标准库管的是"通用到人人都需要"的那部分需求,但你手头的具体工作——调一个大模型接口、解析一种冷门数据格式、画一张统计图——大概率早就有人写成库挂到网上了。Python 最厚的护城河就是这片第三方生态,而用好它靠三样基本功:pip 装包、requirements.txt 记账、venv 隔离。这一章把三样一次配齐,做完作业你会得到一个真正"工程化"的项目骨架。


1. pip 与 PyPI:生态的入口

PyPI(Python Package Index)是官方包仓库,全世界的开发者往上面发布作品;pip 是从仓库取货的工具,从 Python 3.4 起随解释器一起安装,开箱即用:

pip --version   # 看看版本,顺便确认它可用
pip help        # 全部子命令的说明书

一个常见坑:机器上装了多个 Python 时,裸敲 pip 到底服务哪一个说不清。两种保险写法——改用 pip3,或者干脆借当前解释器之手:

python -m pip install 包名   # 谁的 python,就装给谁

2. 安装第三方库

2.1 最朴素的装法

pip install requests   # HTTP 请求库
pip install rich       # 终端美化输出

2.2 把版本攥在手里

生产环境最怕"昨天还好好的,今天一升级就崩了"。装包时顺手加上版本约束:

pip install requests==2.31.0        # 钉死某个版本
pip install "requests>=2.20"        # 设个下限
pip install "requests>=2.20,<3.0"   # 圈定一个区间

完整的约束符号一览:

符号 含义
== 钉死指定版本
>= 下限(含)
> 严格大于
<= 上限(含)
< 严格小于
~= 锁住主次版本,只放开补丁号
!= 排除某个版本
, 组合多个条件
* 通配任意版本

2.3 一条命令装一串

pip install requests rich python-dotenv

3. 升级与卸载

pip install --upgrade requests   # 升到最新,可简写成 -U
pip install -U pip               # 给 pip 自己升级

pip uninstall requests           # 卸载(会先问一句确认)
pip uninstall -y requests rich   # -y 跳过确认,可连卸多个

4. 摸清环境里装了什么

pip list                 # 当前环境里的全部包
pip list --outdated      # 哪些包有新版本可升
pip show requests        # 单个包的详细档案

pip show 的典型输出长这样:

Name: requests
Version: 2.31.0
Summary: Python HTTP for Humans.
Requires: certifi, charset-normalizer, idna, urllib3
Required-by:

重点盯最后两行:Requires 是它依赖谁,Required-by 是谁依赖它——排查依赖冲突时全靠这两行。

5. 国内镜像加速

PyPI 服务器在境外,直连下载有时慢得让人怀疑人生。国内高校和企业维护了一批镜像站,内容与官方保持同步:

镜像 地址
清华大学 https://pypi.tuna.tsinghua.edu.cn/simple/
阿里云 https://mirrors.aliyun.com/pypi/simple/
中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/
华为云 https://repo.huaweicloud.com/repository/pypi/simple/

临时借用一次(只对当条命令生效):

pip install requests -i https://pypi.tuna.tsinghua.edu.cn/simple/

设为默认(写进 pip 的全局配置):

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

6. requirements.txt:把依赖交给文件管

项目换台机器、换个同事接手,怎么保证环境里装的包一模一样?答案是让文件替你记账。约定俗成的文件名是 requirements.txt:

requests>=2.31.0
python-dotenv>=1.0.0
rich==13.7.0

两条核心命令:

pip freeze > requirements.txt    # 把当前环境冻成一份清单
pip install -r requirements.txt  # 照着清单原样复刻环境

注意 freeze 导出的是当前环境的全部包(连依赖的依赖都在),适合"精确复刻"场景;如果你维护的是要给别人用的库,通常手写直接依赖即可,不必事无巨细。

7. 虚拟环境 venv:一个项目一间储物间

7.1 为什么需要隔离

A 项目要用 requests 2.20,B 项目非要 requests 2.31——同一个全局环境里,两个版本装不下,谁后装谁覆盖。虚拟环境的思路很直白:给每个项目单独配一套 site-packages,互不打扰。

7.2 三步上手

# 1. 在项目目录里创建虚拟环境(会生成一个 .venv 目录)
python -m venv .venv

# 2. 激活(macOS / Linux)
source .venv/bin/activate
# 2. 激活(Windows)
.venv\Scripts\activate

# 3. 激活后再装包,东西只进这个项目的储物间
pip install requests

# 用完退出,回到全局环境
deactivate

激活成功的标志:命令行提示符前面多出 (.venv) 字样。

7.3 标准工作流

python -m venv .venv              # ① 建环境
source .venv/bin/activate         # ② 进环境
pip install -r requirements.txt   # ③ 照单安装
# ……安心开发……
pip freeze > requirements.txt     # ④ 收工前更新清单
deactivate                        # ⑤ 退环境

两个冷知识:

  1. python -m venv 里的 -m 表示"按模块方式运行"——解释器会沿着第 15 章讲的模块搜索路径找到 venv 再执行它
  2. venv 的前身是第三方库 virtualenv;Python 3.3 起官方把它的核心能力精简后收编进标准库,从此不必额外安装

8. 作业

老规矩:先自己写,卡住了再让 AI 打下手,以亲手跑通为准。

习题一:终端 AI 聊天助手

做一个能在命令行里和 AI 大模型连续对话的工具,要求:

  1. 接口地址、模型名、密钥都从 .env 读取——密钥绝不能写死在代码里
  2. 支持多轮对话:把历史消息一路带上,模型才"记得"前面聊过什么
  3. 回复按流式输出逐小段打印,而不是憋到最后一次性吐出

提示:HTTP 请求用 requests,读配置用 python-dotenv,依赖记录进 requirements.txt,开发全程在虚拟环境里进行——正好把本章内容串一遍。


下一章:18 · 线程与进程