第4章:Python虚拟环境——隔离Zephyr项目依赖
说实话,我刚开始接触Zephyr的时候,踩过一个大坑。
那时候我电脑上同时跑着三四个嵌入式项目,每个项目依赖的Python包版本都不一样。今天装个west,明天装个pyocd,后天发现某个库版本冲突了,整个环境乱成一锅粥。嗯,后来我才意识到——Python虚拟环境,这东西真不是可有可无的。
4.1 为什么需要虚拟环境?
你想想看,Zephyr的构建系统依赖一堆Python工具:west、pyyaml、cbor、intelhex……这些包都有版本要求。如果你直接在系统级Python里装,迟早会出问题。
我个人的习惯是:每个项目一个虚拟环境。这样互不干扰,想删就删,想重建就重建。
核心原则:虚拟环境 = 项目的“私人Python空间”。
所有依赖都装在这个空间里,不影响系统其他部分。
4.2 创建虚拟环境
Zephyr官方推荐用 python3 -m venv 来创建。别用 virtualenv,那个是第三方工具,venv是Python自带的,更干净。
操作很简单,就一条命令:
python3 -m venv ~/zephyr_venv
这条命令会在你的home目录下创建一个叫 zephyr_venv 的文件夹。里面包含了独立的Python解释器、pip、以及一套干净的库目录。
我记得第一次用的时候,还特意进去看了看结构:
~/zephyr_venv/
├── bin/ # 可执行文件(python3, pip等)
├── include/ # 头文件
├── lib/ # 第三方库安装目录
└── pyvenv.cfg # 配置文件
说白了,这就是一个“迷你版”的Python环境。
4.3 激活虚拟环境
创建好之后,你得激活它。激活之后,你所有的 pip install 和 python 命令都会在这个虚拟环境里执行。
Linux/macOS下:
source ~/zephyr_venv/bin/activate
Windows下:
.\zephyr_venv\Scripts\activate
激活成功后,你会看到命令行前面多了个 (zephyr_venv) 的提示符:
(zephyr_venv) user@host:~$
看到这个括号,就说明你已经在虚拟环境里了。这时候你运行 which python,会发现它指向的是虚拟环境里的Python,而不是系统的。
小技巧:我习惯在终端里把虚拟环境名改成项目名。比如 zephyr_venv 改成 zephyr_project,这样一眼就能看出来当前在哪个项目里。
4.4 安装Zephyr依赖
激活虚拟环境后,就可以安装Zephyr需要的工具了。核心就是 west:
pip install west
然后通过west来安装其他依赖:
west init ~/zephyrproject
cd ~/zephyrproject
west update
west zephyr-export
pip install -r ~/zephyrproject/zephyr/scripts/requirements.txt
这里要注意:requirements.txt 文件里列出了Zephyr所有需要的Python包。用 -r 参数一次性安装,省心省力。
我曾经试过手动一个个装,结果漏了一个 pyelftools,编译的时候报了个莫名其妙的错,查了半天才发现是依赖没装全。嗯,从那以后我再也不偷懒了。
4.5 退出虚拟环境
用完了,想回到系统环境?很简单:
deactivate
命令行前面的 (zephyr_venv) 就消失了。这时候你再运行 python,又回到了系统自带的版本。
4.6 避坑指南
我曾经踩过的坑:
- 不要用sudo pip install——在虚拟环境里不需要sudo,用了反而会把包装到系统里,破坏隔离性。
- 激活后不要切换终端窗口——每个终端窗口需要单独激活虚拟环境。你在这个窗口激活了,另一个窗口还是系统环境。
- 虚拟环境不要放在项目目录里——我习惯放在
~/venvs/下,这样项目目录干净,也方便多个项目共用同一个虚拟环境(虽然我不推荐这么做)。
4.7 常用命令速查表
| 操作 | 命令 |
|---|---|
| 创建虚拟环境 | python3 -m venv 路径 |
| 激活(Linux/macOS) | source 路径/bin/activate |
| 激活(Windows) | 路径\Scripts\activate |
| 退出 | deactivate |
| 查看已安装包 | pip list |
| 导出依赖列表 | pip freeze > requirements.txt |
| 从文件安装依赖 | pip install -r requirements.txt |
4.8 小结
虚拟环境这东西,说白了就是给你的项目一个“干净的房间”。
我见过不少新手直接在系统Python里装东西,结果某天升级系统或者装了个新包,整个环境炸了,所有项目都跑不起来。虚拟环境就是用来避免这种悲剧的。
记住:每个Zephyr项目,都应该有自己的虚拟环境。 这是专业开发者的基本素养。
下一章,我们会用这个干净的虚拟环境,来安装Zephyr SDK和工具链。准备好了吗?
公众号:蓝海资料掘金营,微信deep3321