同一个环境中安装两个不同版本esp-idf的python冲突解决方案

一、新增 v5.5.1 版本流程
1. 克隆 v5.5.1 版本
复制代码
cd ~/xiaozhi
git clone -b v5.5.1 --recursive https://github.com/espressif/esp-idf.git esp-idf-v5.5.1

关键 :指定克隆后的目录名为 esp-idf-v5.5.1,以区别于其他版本。

2. 安装该版本的 Python 依赖
复制代码
cd ~/xiaozhi/esp-idf-v5.5.1
./install.sh esp32s3  # 这将安装此版本所需的工具链和 Python 包

如果你的网络环境访问 GitHub 较慢,可以使用国内镜像,例如在 install.sh 后添加 --mirror https://idf-registry.espressif.cn 参数。

3. 激活 v5.5.1 以编译你的项目

ESP-IDF 版本管理的核心是 export.sh 脚本。你需要哪个版本,就在终端里"激活"哪个版本,每次打开新的终端窗口,在你开始工作前,运行:

复制代码
cd ~/xiaozhi/esp-idf-v5.5.1
. ./export.sh

这个命令会为当前终端会话设置好 v5.5.1 的所有路径。

4. 验证并编译

激活后,去你的项目目录编译:

复制代码
cd ~/xiaozhi/xiaozhi-esp32-main
idf.py --version  # 应显示 5.5.1 相关信息
idf.py set-target esp32s3
idf.py build
5. 切换到其他版本

如果要使用其他版本(例如你原来的 esp-idf-backup),只需关闭当前终端,打开新终端,然后去那个版本的目录执行其 export.sh 即可。

二、Python环境新老版本冲突

之前激活过 v6.0 的环境,导致 IDF_PYTHON_ENV_PATH 环境变量指向了 v6.0 的环境。导致现在要安装的是 **v5.5.1。**两者版本不匹配,安装程序因此停止了。

解决步骤:

1. 删除旧的 v6.0 Python 环境 (这不会删除你的 v6.0 IDF 源代码):
复制代码
rm -rf ~/.espressif/python_env/idf6.0_py3.10_env
2. 确保退出当前所有 ESP-IDF 环境

最简单的方法是:关闭当前的终端窗口,重新打开一个新的终端窗口。这样可以确保所有之前设置的环境变量都被清空。

3. 在新的终端窗口中,重新运行 v5.5.1 的安装脚本

这不会破坏你的v6.0源码,只是删除其Python包环境。当你需要v6.0时,再回去运行一次它的install.sh即可。

复制代码
cd ~/xiaozhi/esp-idf-v5.5.1
./install.sh

优点 :操作简单,后续切换版本时,只需要在对应目录执行 export.sh,其install.sh会确保Python环境正确。
后续 :当某天你需要用回 ~/esp32/esp-idf (v6.0)时,只需进入其目录,运行 ./install.sh 它会自动重建v6.0的Python环境。

三、下次 版本切换

如果你之前按照我的建议删除了 v6.0 的 Python 环境~/.espressif/python_env/idf6.0_py3.10_env),那么在你第一次切换回 v6.0 时,export.sh 可能会失败或提示需要安装。

此时,你需要先在 v6.0 目录下运行一次 install.sh 来重建它的环境

复制代码
cd ~/esp32/esp-idf
./install.sh
# 安装完成后,再运行 . ./export.sh
相关推荐
Jason_chen20 分钟前
Linux 6.2 音频机制深度解析:AI驱动的低延迟音频与零信任音频安全架构
linux
下午写HelloWorld24 分钟前
Linux系统及Ubuntu常用指令
linux·ubuntu·操作系统
lizhihai_991 小时前
股市学习心得-AI 产业链核心标的梳理清单
大数据·服务器·人工智能·科技·学习
云计算磊哥@2 小时前
运维开发宝典026-MySQL02数据库表操作
运维·数据库·运维开发
weixin_523185322 小时前
Collections.unmodifiableMap详解:真的不可修改吗?
java·linux·前端
黄同学real2 小时前
解决 Visual Studio Web Deploy 远程发布报 401 未授权 (ERROR\_USER\_UNAUTHORIZED)
服务器
天天进步20152 小时前
Tunnelto 源码解析 #9:控制服务器设计:Warp、WebSocket、Ping/Pong 与连接保活
运维·服务器·websocket
凡人叶枫3 小时前
Effective C++ 条款04:确定对象被使用前已先被初始化
java·linux·开发语言·c++·嵌入式开发
云栖梦泽3 小时前
玩转RK3506SDK
linux·嵌入式硬件
极客先躯3 小时前
高级java每日一道面试题-2026年02月01日-实战篇[Docker]-Docker Volume 的生命周期管理是怎样的?
java·运维·docker·容器·持久化·架构图·容器卷