Skip to content

📥 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.txt

pip 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

练习题 ​

  1. 创建虚拟环境,安装 requests 和 flask,导出 requirements.txt
  2. 用 venv 创建两个虚拟环境,分别装不同版本的 django,验证互不影响
  3. 配置清华镜像源为默认源
  4. 拿到一个只写了 requirements.txt 的项目,从零搭建并跑起来
  5. 查看 pip list --outdated,升级一个过期包

📥 依赖管理搞定。下节 实战:自动化脚本,把学到的所有知识串起来解决真实问题。


🎯 本章要点 ​

  • python -m pip 确保你用的 pip 属于当前 Python 解释器
  • python -m venv <目录名> 创建隔离环境。
  • pip freeze > requirements.txt 锁定当前所有包的精确版本
加载练习题中...

有问题或补充?欢迎留言