Skip to content

Python环境的概念 ​

你可以把 Python 环境理解成:

一个独立的 Python 工作房间。

每个房间里,都可以放自己的:

  • Python 版本
  • 第三方库
  • 库的版本
  • 项目依赖

而且不同房间之间,基本互不影响。


比如你电脑上有两个项目。

项目 A 是老项目,需要:

Python 3.8
numpy 1.23
torch 1.x

项目 B 是新项目,需要:

Python 3.11
numpy 2.x
torch 2.x

如果整个电脑只有一个 Python,那么就容易出现这种情况:

项目A:我要 numpy 1.23!
项目B:不行,我要 numpy 2.0!

你把 numpy 升级到 2.0,项目 A 可能直接不能跑了。

所以我们不让它们共用同一套东西,而是分别建立两个环境:

电脑
│
├── 环境 project_a
│   ├── Python 3.8
│   ├── numpy 1.23
│   └── torch 1.x
│
└── 环境 project_b
    ├── Python 3.11
    ├── numpy 2.x
    └── torch 2.x

这就是 Python 环境最核心的意义:

给不同项目准备不同的一套 Python + 第三方库,避免互相打架。


Miniconda 是干嘛的? ​

Miniconda 可以先粗暴理解成:

一个专门帮你管理这些 Python 环境的工具。

比如你告诉它:

conda create -n yolo python=3.10

意思就是:

“Conda,给我新建一个叫 yolo 的房间,里面装 Python 3.10。”

之后:

conda activate yolo

意思就是:

“我现在进入 yolo 这个房间。”

然后你执行:

pip install numpy

这个 numpy 默认就是安装到 yolo 环境里,而不是安装到其他环境里。

退出:

conda deactivate

就是:

“离开当前这个 Python 房间。”


环境到底是什么东西? ​

它其实没那么神秘。

本质上就是电脑上的一个文件夹。

例如 Miniconda 可能有:

miniconda3/
├── bin/
├── lib/
└── envs/
    ├── yolo/
    ├── rknn/
    └── opencv/

例如:

envs/yolo/

里面实际上就有这个环境自己的:

python
pip
numpy
torch
opencv
...

所以所谓的:

conda activate yolo

本质上就是告诉电脑:

“接下来执行 python、pip 等命令的时候,优先使用 yolo 文件夹里的那些程序。”


为什么 activate 之后 Python 会变? ​

比如:

conda activate yolo
which python

可能得到:

/home/chuiyu/miniconda3/envs/yolo/bin/python

换一个环境:

conda activate rknn
which python

可能变成:

/home/chuiyu/miniconda3/envs/rknn/bin/python

你虽然输入的都是:

python

但是实际上调用的是不同的 Python 程序。

可以类比成:

你说:“拿螺丝刀给我。”

在 A 工具箱里:
→ 拿的是 A 工具箱的螺丝刀

切换到 B 工具箱:
→ 拿的是 B 工具箱的螺丝刀

conda activate 就相当于:

切换当前正在使用的工具箱。


base 又是什么? ​

安装 Miniconda 以后经常看到:

(base) chuiyu@ubuntu:~$

这个 base 其实就是:

Miniconda 自己默认创建的第一个 Python 环境。

也就是:

Miniconda
│
├── base
├── yolo
├── rknn
└── cpp_test

通常不建议什么东西都塞到 base 里面。

更推荐:

base
主要负责 conda 本身

yolo
专门做 YOLO

rknn
专门做 RKNN

其他项目
再创建其他环境

这样以后不会越来越乱。


conda 和 pip 又是什么关系? ​

这个也很容易混。

可以这样记:

conda
↓
负责管理“房间”
也可以负责往房间里装东西

pip
↓
主要负责往当前房间里安装 Python 第三方库

例如:

conda create -n demo python=3.10

创建房间。

conda activate demo

进入房间。

pip install requests

往这个房间里面安装 requests。

当然 conda 自己也可以:

conda install numpy

所以两者都有“安装软件包”的能力,只不过 conda 还负责环境管理。


如果你是准备给别人上课,我建议第一句话直接这么讲:

Python 环境就是一套独立的 Python + 第三方库。不同项目使用不同环境,这样一个项目升级、删除、修改库,不会把其他项目搞坏。Miniconda 就是帮助我们创建、切换、删除这些环境的工具。

然后画这张图就足够了:

                    Miniconda
                       │
          ┌────────────┼────────────┐
          ↓            ↓            ↓
        base          yolo         rknn
          │            │            │
      Python3.12   Python3.10   Python3.8
                       │            │
                     torch        rknn
                     numpy        numpy
                     opencv       opencv

学生只要先理解:

环境 = 独立工具箱

conda create = 买一个新工具箱

conda activate = 切换当前工具箱

conda deactivate = 退出当前工具箱

pip install = 往当前工具箱里放工具

后面再教 create / activate / list / remove / pip install,就非常顺了。

最近更新