跳到主要内容

Python 环境管理

学习目标

  • 理解为什么需要虚拟环境(通过一个真实的翻车案例)
  • 安装和配置 Miniconda
  • 掌握虚拟环境的创建、激活、切换、删除
  • 理解 conda 和 pip 的区别,知道什么时候用哪个
  • 学会导出和导入环境配置
  • 能独立排查常见环境问题

为什么需要虚拟环境?

一个真实的翻车场景

小明在做两个 AI 项目:

  • 项目 A(图像分类):需要 torch==1.13,因为用了一个只兼容 1.13 的旧库
  • 项目 B(大模型应用):需要 torch==2.1,因为用了最新的 Flash Attention

如果他把两个项目的依赖都装在同一个 Python 里:

pip install torch==1.13    # 项目 A 能跑了
pip install torch==2.1 # 项目 B 能跑了,但 torch 被升级到 2.1
# 这时候回去跑项目 A —— 报错了!因为 torch 已经变成 2.1 了

这就是包版本冲突——一个 Python 环境只能装一个版本的同名包。

虚拟环境怎么解决这个问题?

虚拟环境 = 一个独立的、隔离的 Python 安装。每个项目一个环境,互不干扰:

项目 A 的环境:Python 3.10 + torch 1.13 + ...
项目 B 的环境:Python 3.11 + torch 2.1 + ...

切换项目时,切换环境就行。两边互不影响。

类比

把虚拟环境想象成手机上的多用户/工作空间。每个用户有自己独立安装的 App,互不干扰。你可以在"工作用户"里装钉钉,在"个人用户"里装游戏,它们之间完全隔离。


安装 Miniconda

为什么选 Miniconda?

工具说明推荐度
Miniconda轻量级,只装核心组件,按需安装其他包⭐⭐⭐⭐⭐
Anaconda全家桶,预装 250+ 个包,占用 3GB+⭐⭐⭐
venv + pipPython 自带,轻量但功能较少⭐⭐⭐

Miniconda 是最佳选择:够轻量、能管理 Python 版本、能创建虚拟环境、AI 社区广泛使用。

macOS 安装

# 下载安装脚本(Apple Silicon / M1/M2/M3)
curl -O https://repo.anaconda.com/miniconda/Miniconda3-latest-MacOSX-arm64.sh

# Intel Mac 用这个
# curl -O https://repo.anaconda.com/miniconda/Miniconda3-latest-MacOSX-x86_64.sh

# 运行安装
bash Miniconda3-latest-MacOSX-arm64.sh

安装过程中:

  • 阅读协议:按 q 跳过,输入 yes 同意
  • 安装路径:直接回车用默认路径
  • 是否初始化:输入 yes

安装完成后,关闭终端再重新打开

Ubuntu/Linux 安装

# 下载
curl -O https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh

# 安装
bash Miniconda3-latest-Linux-x86_64.sh

# 按提示操作,最后选 yes 初始化

关闭终端再重新打开。

Windows 安装

  1. 下载安装包:Miniconda Windows 安装程序
  2. 双击运行,一路 Next
  3. 勾选 "Add Miniconda3 to my PATH environment variable"(方便在 PowerShell 中使用)
  4. 安装完成后重启 PowerShell

验证安装

conda --version
# 输出类似: conda 24.x.x

python --version
# 输出类似: Python 3.12.x

看到版本号就说明安装成功了。

配置国内镜像(国内用户强烈推荐)

默认的 conda 源在国外,下载速度很慢。配置清华镜像:

# 添加清华镜像
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch
conda config --set show_channel_urls yes

同时配置 pip 的清华镜像(如果之前没配过):

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

虚拟环境操作

创建环境

# 创建一个名叫 ai-basic 的环境,Python 版本 3.11
conda create -n ai-basic python=3.11

# conda 会列出要安装的包,输入 y 确认

-n ai-basic 是环境的名字,你可以随便起,建议用项目名或用途命名。

激活环境

conda activate ai-basic

激活后,你的终端提示符前面会出现环境名:

(ai-basic) zhangsan@MacBook ~ $

这表示你现在在 ai-basic 环境里。在这个环境里安装的任何包,都只属于这个环境。

在环境里安装包

# 确认当前环境
conda info --envs
# 带 * 号的就是当前激活的环境

# 用 pip 安装包(推荐大部分情况使用 pip)
pip install numpy pandas matplotlib

# 用 conda 安装包(某些特殊的包用 conda 更好)
conda install scipy

# 查看当前环境安装了哪些包
pip list
# 或
conda list

案例:为不同项目创建不同环境

# 项目 A:传统机器学习
conda create -n ml-project python=3.11
conda activate ml-project
pip install numpy pandas scikit-learn matplotlib seaborn jupyter

# 项目 B:深度学习
conda create -n dl-project python=3.11
conda activate dl-project
pip install torch torchvision numpy matplotlib tensorboard

# 项目 C:大模型应用
conda create -n llm-project python=3.11
conda activate llm-project
pip install openai langchain chromadb fastapi

三个项目,三个独立的环境,互不干扰。

切换环境

# 切换到 ml-project 环境
conda activate ml-project

# 切换到 dl-project 环境
conda activate dl-project

# 退出当前环境(回到 base 环境)
conda deactivate

查看所有环境

conda env list
# 或
conda info --envs

输出:

# conda environments:
#
base /Users/zhangsan/miniconda3
ai-basic /Users/zhangsan/miniconda3/envs/ai-basic
ml-project * /Users/zhangsan/miniconda3/envs/ml-project
dl-project /Users/zhangsan/miniconda3/envs/dl-project
llm-project /Users/zhangsan/miniconda3/envs/llm-project

* 号表示当前激活的环境。

删除环境

# 删除一个不再需要的环境
conda env remove -n ai-basic

# 确认已删除
conda env list

conda install vs pip install

这是新手最常问的问题。简单的原则:

情况用什么原因
大部分 Python 包pip installpip 的包最全,更新最快
CUDA 相关的包conda installconda 能自动处理 CUDA 依赖
系统级的库(如 MKL)conda installpip 装不了系统级的库
不确定用哪个先试 pip installpip 更通用
一个重要原则

在同一个环境里,尽量不要混用 conda install 和 pip install 安装同一个包。如果你用 pip 装了 numpy,就不要再用 conda 装一次 numpy。混用可能导致版本混乱。

推荐做法:在 conda 环境里,优先用 pip 安装所有 Python 包。


导出和导入环境

场景:分享你的项目环境

你做完一个项目,想让同事(或未来的自己)能快速搭建相同的环境。

方式一:pip freeze(最常用)

# 导出当前环境的所有包到 requirements.txt
pip freeze > requirements.txt

requirements.txt 长这样:

numpy==1.26.4
pandas==2.2.0
scikit-learn==1.4.0
matplotlib==3.8.2
torch==2.1.2

别人拿到后,一行命令恢复:

# 创建新环境
conda create -n restored-env python=3.11
conda activate restored-env

# 安装所有依赖
pip install -r requirements.txt

方式二:conda env export

# 导出完整环境(包括 conda 和 pip 安装的包)
conda env export > environment.yml

恢复:

conda env create -f environment.yml

该用哪种?

文件适合场景优点缺点
requirements.txt大部分项目简单、通用、跨平台不含 Python 版本信息
environment.yml包含 conda 特殊包的项目完整、含 Python 版本可能有平台差异

建议: 每个项目里都放一个 requirements.txt,这是 Python 社区的标准做法。


常见问题排查

问题1:conda activate 不生效

CommandNotFoundError: Your shell has not been properly configured to use 'conda activate'.

解决:

# 初始化 conda(根据你的 shell 选择)
conda init zsh # macOS 默认
conda init bash # Linux 默认

# 然后重启终端

问题2:command not found: python

安装了 Miniconda 但输入 python 报找不到。

# 检查 conda 环境是否激活
conda activate base

# 如果还不行,检查 PATH
which python
echo $PATH

问题3:包安装超时

pip install torch
# 卡住很久或报 timeout

解决:确认配置了国内镜像,或者手动指定:

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

问题4:版本冲突

ERROR: pip's dependency resolver found conflicts

解决思路:

# 方案1:创建一个全新的环境,逐个安装
conda create -n fresh python=3.11
conda activate fresh
pip install 包A
pip install 包B # 如果冲突,会提示哪里冲突

# 方案2:把冲突的包降到兼容的版本
pip install "包A>=1.0,<2.0"

问题5:装了包但 import 报错

import torch
# ModuleNotFoundError: No module named 'torch'

最常见原因:你装包的环境和运行代码的环境不是同一个。

# 检查当前环境
conda info --envs # 看哪个带 *

# 检查包装在了哪个环境里
conda activate 你以为装了torch的环境
pip list | grep torch

# 确认 Python 路径
which python
# 应该指向你的 conda 环境目录

实操练习:搭建你的第一个学习环境

# 1. 创建一个专门用于本课程的环境
conda create -n ai-course python=3.11
conda activate ai-course

# 2. 安装第一阶段需要的基础包
pip install requests beautifulsoup4 fastapi uvicorn

# 3. 安装第二阶段需要的数据分析包
pip install numpy pandas matplotlib seaborn jupyter

# 4. 验证安装
python -c "
import numpy as np
import pandas as pd
print(f'NumPy 版本: {np.__version__}')
print(f'Pandas 版本: {pd.__version__}')
print('✅ 环境搭建成功!')
"

# 5. 导出环境配置
pip freeze > requirements.txt
cat requirements.txt

# 6. 查看环境列表
conda env list

如果最后看到 ✅ 环境搭建成功!,你的 Python 环境就准备好了。


命令速查

命令用途
conda create -n 名字 python=3.11创建新环境
conda activate 名字激活环境
conda deactivate退出当前环境
conda env list列出所有环境
conda env remove -n 名字删除环境
pip install 包名安装 Python 包
pip list查看已安装的包
pip freeze > requirements.txt导出依赖列表
pip install -r requirements.txt从文件安装依赖