主题
📥 pip 与虚拟环境
学到这里你已经能写不少代码了。下一步是学会用别人写好的库,以及管理项目的依赖——这就是 pip 和虚拟环境的用武之地。
pip — Python 的包管理器
安装、卸载、查看
bash
# 安装包
pip install requests # 最新版
pip install requests==2.28.0 # 指定版本
pip install "requests>=2.28,<3.0" # 版本范围
# 卸载
pip uninstall requests -y # -y 跳过确认
# 查看已安装
pip list # 所有包
pip list --outdated # 过期的包
pip show requests # 某个包的详细信息冻结依赖
bash
# 导出当前环境所有包及版本
pip freeze > requirements.txt生成的 requirements.txt 长这样:
certifi==2023.7.22
charset-normalizer==3.2.0
requests==2.31.0
urllib3==2.0.4别人拿到这个文件,一键安装:
bash
pip install -r requirements.txt选对 pip
确认你用的是目标 Python 的 pip:
bash
pip --version # 看看路径
python -m pip install xxx # 最保险:用哪个python就装到哪国内镜像源 — 提速必备
pip 默认从国外服务器下载,国内慢得抓狂。换清华/阿里镜像:
临时使用
bash
pip install requests -i https://pypi.tuna.tsinghua.edu.cn/simple永久配置(推荐)
bash
# Linux/macOS
mkdir -p ~/.pip
cat > ~/.pip/pip.conf << 'EOF'
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
trusted-host = pypi.tuna.tsinghua.edu.cn
EOF
# Windows
# 在 %APPDATA%\pip\pip.ini 中写入相同内容其他可用镜像:
- 清华:
https://pypi.tuna.tsinghua.edu.cn/simple - 阿里云:
https://mirrors.aliyun.com/pypi/simple/ - 中科大:
https://pypi.mirrors.ustc.edu.cn/simple/ - 豆瓣:
https://pypi.douban.com/simple/
venv — 虚拟环境
为什么要虚拟环境? 项目 A 需要 Django 3.2,项目 B 需要 Django 4.0。全局只能装一个版本,打起来了。
虚拟环境就是给每个项目一个独立的 Python 小世界。
创建和激活
bash
# 创建虚拟环境
python -m venv myenv # 会在当前目录创建 myenv/ 文件夹
# 激活(Linux/macOS)
source myenv/bin/activate
# 激活(Windows CMD)
myenv\Scripts\activate
# 激活(Windows PowerShell)
myenv\Scripts\Activate.ps1激活后你的终端前面会多一个 (myenv) 标识,表示现在在虚拟环境里。
验证
bash
# 激活后
which python # /path/to/myenv/bin/python
which pip # /path/to/myenv/bin/pip
pip list # 只有寥寥几个基础包退出和删除
bash
# 退出虚拟环境
deactivate
# 删除虚拟环境(就是删文件夹)
rm -rf myenv/完整工作流
bash
# 1. 创建项目
mkdir myproject && cd myproject
# 2. 创建虚拟环境
python -m venv venv # 习惯管虚拟环境文件夹叫 venv
# 3. 激活
source venv/bin/activate # Linux/macOS
# 4. 安装依赖
pip install requests flask
# 5. 冻结依赖
pip freeze > requirements.txt
# 6. 提交代码时把 requirements.txt 带上,venv/ 加到 .gitignore
echo "venv/" >> .gitignore其他开发者拿到项目:
bash
git clone xxx && cd myproject
python -m venv venv
source venv/bin/activate
pip install -r requirements.txtpip install --user vs 全局安装
bash
# 全局安装(需要管理员权限)
sudo pip install flask # Linux:不推荐!
pip install flask # 如果有虚拟环境才安全
# 用户级安装(装到 ~/.local/)
pip install --user flask # 不影响系统,不需要 sudo为什么不要 sudo pip?
sudo pip install 会修改系统 Python 的环境,可能破坏系统工具(比如某些 Linux 系统工具依赖特定版本的 Python 包)。永远在你自己的虚拟环境里装包。
版本锁定进阶
pip freeze 把间接依赖也写进去了,文件又大又难读。更好的方式:
bash
# 安装 pip-tools
pip install pip-tools
# 手动写 requirements.in(只写直接依赖)
# requests
# flask
# 生成锁定的 requirements.txt(含所有间接依赖 + 哈希)
pip-compile requirements.in
# 同步环境到 requirements.txt
pip-sync requirements.txt实战:搭建 Flask 项目
bash
# 从头到尾 5 分钟
mkdir hello-flask && cd hello-flask
python -m venv venv
source venv/bin/activate
pip install flask
pip freeze > requirements.txt
cat > app.py << 'EOF'
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "<h1>Hello, Python!</h1>"
if __name__ == "__main__":
app.run(debug=True)
EOF
python app.py
# 浏览器打开 http://127.0.0.1:5000常见坑
坑1:系统 Python 和 venv 搞混
bash
# 忘了激活虚拟环境
pip install flask # 装到全局了!
which python # /usr/bin/python ← 不是 venv 里的激活虚拟环境后,which python 应该指向 venv/bin/python。VS Code 里用 Ctrl+Shift+P → "Python: Select Interpreter" 手动选。
坑2:权限问题用 sudo pip
Linux 新手常见:"pip install 报 permission denied → 加 sudo"。这是错的。应该 pip install --user 或创建虚拟环境。sudo pip 可能破坏系统。
坑3:pip install 报 SSL 错误
企业网络或代理环境常见。解法:
bash
# 临时绕过(仅开发环境)
pip install xxx --trusted-host pypi.org --trusted-host files.pythonhosted.org
# 或用国内镜像
pip install xxx -i https://pypi.tuna.tsinghua.edu.cn/simple --trusted-host pypi.tuna.tsinghua.edu.cn练习题
- 创建虚拟环境,安装
requests和flask,导出requirements.txt - 用
venv创建两个虚拟环境,分别装不同版本的django,验证互不影响 - 配置清华镜像源为默认源
- 拿到一个只写了
requirements.txt的项目,从零搭建并跑起来 - 查看
pip list --outdated,升级一个过期包
📥 依赖管理搞定。下节 实战:自动化脚本,把学到的所有知识串起来解决真实问题。
🎯 本章要点
- python -m pip 确保你用的 pip 属于当前 Python 解释器
- python -m venv <目录名> 创建隔离环境。
- pip freeze > requirements.txt 锁定当前所有包的精确版本
加载练习题中...