Python 从入门到精通
第 23 / 36 篇
从环境安装和基础语法出发,逐步学习工程实践、自动化、数据处理与 Web 开发。
-
01
Python 怎么装、怎么用 -
02
变量、数字和字符串 -
03
列表:把一组数据放在一起 -
04
元组、集合和字典 -
05
条件判断:让程序做选择 -
06
循环:重复的事交给程序 -
07
函数:把代码整理成可复用的块 -
08
模块与包:拆分你的程序 -
09
输入、输出与字符串格式化 -
10
文件读写:保存程序的数据 -
11
异常处理:程序出错时怎么办 -
12
基础阶段练习:命令行记账本 -
13
类和对象:面向对象入门 -
14
继承、组合与特殊方法 -
15
迭代器与生成器 -
16
列表推导式与生成器表达式 -
17
装饰器:给函数增加能力 -
18
上下文管理器与 with -
19
类型标注与 dataclass -
20
正则表达式:从文本中找规律 -
21
日期、时间与时区 -
22
日志与调试 -
23
虚拟环境与依赖管理正在阅读 -
24
测试:让修改不再提心吊胆 -
25
网络请求:用 Python 调用 API -
26
网页解析与合规采集 -
27
操作 Excel、CSV 与批量文件 -
28
SQLite:给程序加一个数据库 -
29
数据分析入门:NumPy 与 Pandas -
30
画图:把数据变得直观 -
31
Flask 入门:做一个小网站 -
32
异步编程:同时处理多项任务 -
33
线程、进程与并发选择 -
34
性能分析与优化 -
35
项目结构、配置与发布 -
36
综合项目:从需求到上线
你已经装了 requests、beautifulsoup4 这些第三方库。但你有没有遇到过:项目 A 需要 requests 2.x,项目 B 需要 requests 3.x,装来装去全乱了?这就是”依赖冲突”。解决办法是虚拟环境(virtual environment):每个项目一个独立的小环境,互不干扰。这一篇把它和依赖管理讲透。
为什么需要虚拟环境
不加虚拟环境的痛:
pip install装到全局,所有项目共用一份- 项目 A 升级库版本,项目 B 突然跑不起来
- 卸载时不知道哪些是哪个项目用的
- 权限问题:系统 Python 目录经常没权限写
虚拟环境 = 给每个项目一个独立的 Python 环境,自己的包自己装,互不干扰。这是专业开发的标配,不是可选项。
创建和激活
用内置的 venv 模块(Python 3.3+,不用额外装):
# 1. 在项目目录创建虚拟环境(名字随意,惯例叫 venv 或 .venv)
cd myproject
python -m venv venv
# 2. 激活(每次开新终端都要激活一次)
# Windows(cmd / PowerShell)
venvScriptsactivate
# macOS / Linux
source venv/bin/activate
# 3. 激活后命令行提示符前面会出现 (venv)
(venv) $ pip install requests
# 4. 干完活退出
deactivate
激活后 pip install 装的东西都在这个虚拟环境里,和全局完全隔离。检查是否生效:
(venv) $ which python
# /Users/you/myproject/venv/bin/python ← 指向项目里的 python,而不是系统的
pip 的日常操作
# 安装
pip install requests
pip install requests==2.31.0 # 指定版本
pip install "requests>=2.20, <3" # 版本范围
pip install -r requirements.txt # 按清单批量装
# 查看
pip list # 已安装的包
pip show requests # 某个包的详情
# 卸载
pip uninstall requests
# 升级
pip install --upgrade pip
requirements.txt:依赖清单
项目要给别人跑(或者三个月后的自己),得把依赖写清楚。标准做法:
# 生成当前环境的依赖清单(含版本号)
pip freeze > requirements.txt
生成的 requirements.txt 长这样:
beautifulsoup4==4.12.3
requests==2.31.0
flask==3.0.2
别人拿到项目:
pip install -r requirements.txt
注意事项:
pip freeze会把所有间接依赖也列出来,可能很啰嗦;也可以用pipreqs只列项目真正 import 的- requirements.txt 要提交进 git,虚拟环境目录(venv/)不要提交
- 版本号锁死(==)保证可复现,但升级时要手动更新
国内换源:下载快 10 倍
pip 默认走国外 PyPI,国内经常慢到超时。换国内镜像源:
# 临时指定
pip install requests -i https://pypi.tuna.tsinghua.edu.cn/simple
# 永久配置(推荐)
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
# 其他常用源
# 阿里:https://mirrors.aliyun.com/pypi/simple/
# 腾讯:https://mirrors.cloud.tencent.com/pypi/simple/
# 豆瓣:https://pypi.douban.com/simple/
版本冲突的实战处理
装包时报这种错:
ERROR: pip's dependency resolver does not currently take into account all the packages...
requests 2.31.0 requires urllib3<3, but you have urllib3 3.0.0
意思是:requests 要求 urllib3 小于 3,你装的是 3.x。处理套路:
# 1. 让 pip 自己解决(先试试)
pip install requests --upgrade
# 2. 指定兼容版本
pip install "urllib3<3"
# 3. 查依赖关系
pip show requests # 看它依赖什么
pip check # 检查当前环境有没有冲突
# 4. 实在乱套了,重建虚拟环境(最干净)
deactivate
rm -rf venv
python -m venv venv
pip install -r requirements.txt
记住:环境乱到没法收拾,删了重建永远是最快的——这也是虚拟环境最大的好处,全局环境你不敢删。
新手坑
坑 1:忘了激活。终端里 pip install 装到全局去了,项目里 import 不到,或者装到”另一个 Python”里。每次开终端先看提示符有没有 (venv)。
坑 2:python 和 pip 版本对不上。系统里有多个 Python 时,用 python -m pip install xxx 代替 pip install xxx,保证装到当前 python 的环境里。
坑 3:把 venv 目录提交进 git。venv 里有几万个文件,谁 clone 谁崩溃。写进 .gitignore。
小结
- 虚拟环境 = 项目独立的 Python 环境,解决依赖冲突
python -m venv venv创建,source venv/bin/activate(Linux/mac)激活,deactivate退出pip freeze > requirements.txt导出,pip install -r requirements.txt还原- 国内 pip 换清华/阿里源,速度立竿见影
- 环境乱了就删了重建,别硬修;venv 别提交进 git
练习
- 给之前写的记账本项目创建虚拟环境,装上项目需要的包(如果有),导出 requirements.txt
- 把 pip 永久换成清华源,然后安装一个包验证速度
- 思考:为什么 requirements.txt 要锁版本号(==)?如果写
requests不带版本,别人安装时会有什么风险?