讲解
Python 真正的威力在生态:PyPI(Python Package Index,pypi.org)上托管了几十万个第三方包——发 HTTP 请求用 requests、数据分析用 pandas、写 Web 服务用 Flask/FastAPI、机器学习用 scikit-learn。安装它们的标准工具是 pip,它随 Python 一起安装。推荐用法是 python3 -m pip install 包名:用 -m 形式能确保 pip 和你当前的 python3 是配套的,避免多版本 Python 共存时「装到另一个解释器里」的经典事故。
常用 pip 命令一双手数得过来:install 安装(包名==版本号 可以指定版本)、uninstall 卸载、list 列出已安装、show 查看某个包详情、freeze 导出精确版本清单。freeze 的输出格式正是 requirements.txt 的内容——项目用 pip freeze > requirements.txt 记录依赖,别人拿到项目后 pip install -r requirements.txt 一键还原环境。这是 Python 项目协作的标准姿势。
装好包之后 import 即用,和用标准库没有区别。要注意:包名和导入名偶尔不一致(比如 pip 装 Pillow、代码里 import PIL),装完报 ModuleNotFoundError 时先确认导入名。生产建议一句话带过:真实项目一定在虚拟环境里装包(避免污染全局),那是本教程最后一章的主题,学完基础先去那里报到。
示例
以下命令在终端执行(bash 示例,不是 Python 代码):
# 安装指定包、指定版本
python3 -m pip install requests
python3 -m pip install "requests==2.32.3"
# 查看已安装的包与某个包的详情
python3 -m pip list
python3 -m pip show requests
# 导出与还原依赖清单
python3 -m pip freeze > requirements.txt
python3 -m pip install -r requirements.txt
# 卸载
python3 -m pip uninstall -y requests
装好之后,import 即用。下面这段用标准库演示「第三方包能做什么」的等效感觉(requests 没装的话这段也能跑):
# 第三方包装好后就像标准库一样 import
# import requests
# resp = requests.get('https://api.github.com')
# print(resp.status_code, resp.json())
# 用标准库 urllib 体验同样的「拉数据」流程(离线也能跑通结构)
from urllib.request import urlopen
try:
with urlopen('https://api.github.com', timeout=5) as resp:
print('HTTP 状态:', resp.status)
print('前 60 字节:', resp.read(60)[:60])
except OSError as exc:
# URLError 是 OSError 的子类,这里一并兜住断网、超时、连接重置等情况
print('网络不可用时的兜底分支:', type(exc).__name__)
# 查看一个包到底有没有装上:importlib.util.find_spec
import importlib.util
for pkg in ['requests', 'pandas', 'collections']:
found = importlib.util.find_spec(pkg) is not None
print(f'{pkg:>12} 可导入吗:{found}')
常见坑
- pip 和 python 不是同一个解释器:多版本共存时 pip install 装去了 Python 3.9,而你用 3.13 运行。统一 python3 -m pip 杜绝。
- 权限不够直接 sudo pip:把包装进系统 Python 会污染系统环境,macOS 上甚至会被系统保护机制拦下。正解是虚拟环境(最后一章)。
- 包名与导入名不一致:装 PyYAML 导 yaml、装 Pillow 导 PIL、装 beautifulsoup4 导 bs4。装完先查文档确认导入名。
- requirements.txt 不写版本:裸包名意味着每次安装都可能拉到新版,今天的代码明天挂。pip freeze 出精确版本再提交。
小结
PyPI 找包、python3 -m pip 装包、freeze 出 requirements.txt 锁版本;装完 import 即用,包名和导入名偶尔不同。下一节学习读写文件。