跳转至

2023-07 Conda 虚拟环境

内容梗概

本课系统讲解用 conda 管理虚拟环境。老师先说明为什么从之前的 pipenv 方案全面转向 conda:pipenv 无法脱离宿主 Python 版本的限制,而 conda 可以创建任意 Python 版本的独立环境。随后梳理了 Anaconda → Miniconda 的演进关系(用画图方式拆解 conda、Python 环境、预装包三者的组合关系),并给出 conda 在 Windows 上的完整配置流程(环境变量 + conda init)。最后以 autocut、stable-diffusion-webui 等真实 AI 项目为例,演示 conda env list、conda create -n 名字 python=版本、激活环境、用 python -V 和 conda list 验证环境状态,并实地查看虚拟环境中的 site-packages 目录。

说明:字幕为语音转写,"conda"与"pipenv"在转写中有混淆(如"空大""PPENV"等)。按上下文判断,老师早期视频讲的是 pipenv,本课转向 conda。

知识点详解

为什么需要虚拟环境、为什么选 conda(约 00:00–02:46)

  • 实际项目都不是从头写的,都依赖第三方库;一台机器上会有很多不同项目,依赖各不相同,因此需要虚拟环境做隔离。
  • 老师早前视频讲的是 pipenv 这类虚拟环境管理机制(它本身是 Python 的一个第三方包),现在全面转向 conda。
  • 原因:pipenv 不能脱离 Python 自身版本的限制。 举例:你装了 Python 3.11,pipenv 属于 3.11 这个环境下的一个包;如果网上某个项目要求 Python 3.7,pipenv 没法跳出 3.11 再给你整一个 3.7 的环境,实现起来非常麻烦。

Anaconda 与 Miniconda 的关系(约 02:47–08:08)

  • 最早出现的是 Anaconda:面向科学计算用户(数据分析师、科研人员等,计算机不太熟但要用 Python 做计算,比 R、MATLAB 更好工程化)。
  • Anaconda = conda 包管理器 + 自带的 Python 环境(如 py3.11)+ 预装好的大量科学计算包(pandas、scipy,甚至深度学习框架等)。总体积约 900 MB,其中包可能占 850 MB。
  • Miniconda = 把 Anaconda 中的预装包剥掉,只保留最基本的 conda 软件 + 一个干净的 Python 环境,第三方包全部手动安装,体积小得多(约 50 MB)。
  • 好处:conda 像虚拟机或 Docker 一样做整个环境的控制管理工具,可以创建 Python 3.7、3.9、3.11 甚至 2.7 的不同环境,跳出 Python 版本限制,按目标项目的要求精确创建环境。

真实案例:版本冲突(约 09:07–11:51)

  • 例 1:B 站"跟李沐学 AI"大神做的 autocut(字幕里转写为 autoCAD):用文本编辑器剪视频的工具,删掉字幕里重复的句子视频就自动重剪,对老师录课非常有用;依赖 torch、moviepy 等第三方包,当时要求 Python 3.9。
  • 例 2:stable-diffusion-webui(文生图):requirements 要求 Python 3.10.6,课程装的 3.11 就不好使。
  • 这类冲突正是要用 conda 建独立环境解决的场景。

conda 配置第一步:环境变量(约 11:51–14:42)

  • 老师装的是 Miniconda3("3" 指自带的 Python 以 Python 3 为主)。
  • 若命令行里输入 conda 提示找不到命令,第一时间检查环境变量(右键设置 → 系统信息 → 高级系统设置 → 环境变量)。
  • 需要添加**两个目录**,缺一不可:
  • miniconda3(或 anaconda)的**安装根目录**:里面放的是 python.exe;
  • 安装目录下的 Scripts 目录:里面放的是 pip、conda 等辅助工具。
  • 这是安装包自己的目录设计,两个都加好后命令行才能跑 conda。

conda 配置第二步:conda init 初始化 shell(约 14:42–16:41)

  • 光能找到 conda 命令还不够:很多同学 conda 能运行,但**激活虚拟环境时报错**,原因是没有初始化。
  • 用 conda init <shell名> 为不同的 shell 程序初始化 conda 交互指令;conda init --help 可查看支持的 shell:bash、cmd.exe、powershell、fish、tcsh 等。
  • Windows 下建议同时执行 conda init cmd.exe 和 conda init powershell;Mac 默认 bash(若换过 zsh 需自行处理)。
  • 初始化后**重启终端**,提示符前会出现 (base) 字样,表示当前处于 conda 的基础环境——这是配置成功的标志。

常用命令(约 16:41–20:54)

  • conda env list:查看已创建的所有虚拟环境。环境默认放在 conda 安装目录下的 envs(environments)文件夹里。老师展示了自己的环境:ac(autocut)、bark(文本转语音)、cover(自己写的小项目)、sdai(stable diffusion)、so-vits(AI 孙燕姿类歌声转换)、video2lip(数字人)等。
  • conda create -n ac python=3.11:创建环境。-n 即 name,指定环境名;后面指定 Python 版本,可精确到小版本(如 python=3.10.6)。
  • conda create -h:查看参数帮助,底部 examples 里有最常见用法;还可以在建环境时直接指定要包含的包,如 conda create -n 环境名 python=3.11 moviepy。
  • 实用技巧:PowerShell 里按 Ctrl+R 可以搜索历史执行过的命令。
  • conda activate 环境名:激活/切换环境(如 conda activate sdai),提示符前括号里的名字会跟着变。
  • python -V(V 大写):查看当前环境的 Python 版本和安装路径——环境配置搞懵时的"指路明灯"。演示:sdai 环境是 3.10.6,另一个环境是 3.11.3。
  • conda list:查看当前环境已安装的包清单。常见踩坑:明明装过包却报找不到模块,很可能是 pip/conda install 时**装到了别的环境**里,用 conda list 一查便知,"找得到就是有,找不到就是没有"。
  • 不同环境状态完全独立:两个环境的 torch 一个是 2.0 一个是 2.0.1,一个带 CUDA 一个不带。

实地查看 site-packages(约 23:51–结尾)

  • 回应上节课(2023-06)的说法:进入 C:\Users\<用户名>\miniconda3\envs\sdai\Lib\site-packages,可以实际看到安装的包。
  • 以 certifi、filelock、jinja2 为例:每个包文件夹里都有 __init__.py,旁边还有对应的包信息(dist-info)目录。
  • 注意:site-packages 里不仅有手动装的包,还有 Python 内置自带的一些内容;不是通过 pip/conda 装的可能在清单里不显示。

示例与演示

  • 画图拆解:conda(软件)→ 自带 Python 环境 → 内含大量预装包,三者打包成 Anaconda;抽掉预装包即得 Miniconda。
  • 环境变量排错演示:找不到 conda 命令时去高级系统设置检查 miniconda3 与 miniconda3\Scripts 两个路径。
  • conda init 演示:为 cmd 和 PowerShell 初始化,重启后出现 (base)。
  • 建环境演示:conda create -n ac python=3.11;用 Ctrl+R 翻出历史上为不同项目创建环境时用的精确版本(3.9、3.10.6)。
  • 切换与验证演示:conda activate 切换 ac / sdai 环境,分别用 python -V 看版本与路径、用 conda list 对比两个环境安装的包(torch 版本、是否带 CUDA)。
  • 文件管理器演示:进入 envs\sdai\Lib\site-packages 实地查看 certifi、filelock、jinja2 等包及其 __init__.py。

重点与难点

  • conda 相对 pipenv 的核心优势:能为不同项目创建不同 Python 版本的环境,不被宿主 Python 版本锁死。
  • 配置两步走,缺一不可:①环境变量加**安装根目录 + Scripts 目录**;②conda init 对应 shell 后**重启终端**(否则能跑 conda 却激活不了环境,提示符前也没有 (base))。
  • 装错环境是新手最常见的坑:装包前先看提示符前的环境名,报错时先 conda list 验证。
  • python -V(大写)确认版本和路径,是排查环境混乱的第一手段。
  • Anaconda 大而全(约 900 MB),Miniconda 精简(只留 conda + 干净 Python),按需选择;miniconda3 的 "3" 指 Python 3 系列。

关联内容

  • 承接 2023-06"模块与包补充":本课实地验证了 site-packages 和 __init__.py 的说法。
  • 对应正课第 10 章:10.5 虚拟环境管理(原视频主讲 pipenv)、10.6 Python 与 Anaconda,本课是对这两节的更新与补充。
  • 下一课 2023-08"虚拟环境工作流演示"将用本课的 conda 命令完整部署一个真实开源项目。
  • 前置知识:环境变量的概念("计算机维护"类课程讲过)、命令行/终端的基本使用。