You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

MacOS Ventura下ESP-IDF安装是否异常?Hello World示例导入报错求助

MacOS Ventura下ESP-IDF安装是否异常?Hello World示例导入报错求助

别担心,这绝对不是愚蠢的问题——ESP-IDF的测试环境配置确实容易踩坑!我来帮你一步步排查解决:

从你描述的情况和提供的代码来看,报错应该是pytest_embedded_idfpytest_embedded_qemu这类测试模块无法被Python找到,大概率是测试依赖未安装完整,或者VSCode的Python环境没和ESP-IDF的虚拟环境绑定,下面是针对性的解决方案:


1. 先确认ESP-IDF虚拟环境已正确激活

MacOS Ventura下,ESP-IDF默认会创建一个虚拟环境来隔离依赖:

  • 打开终端,先激活ESP-IDF的环境,比如你把ESP-IDF装在~/esp/esp-idf的话,运行:
    source ~/esp/esp-idf/export.sh
    
  • 激活后,建议直接在这个终端里用code .打开你的Hello World项目,这样VSCode会自动继承终端的环境变量,避免环境不匹配。
  • 同时在VSCode左下角检查Python解释器,确保它是ESP-IDF虚拟环境里的版本(比如路径类似~/esp/esp-idf/venv/bin/python)。

2. 手动安装缺失的pytest测试依赖

ESP-IDF的示例测试脚本依赖专属的pytest插件,有时候自动安装会遗漏:
激活环境后,在终端运行以下命令补全依赖:

# 直接安装官方提供的所有测试依赖
pip install -r $IDF_PATH/tools/requirements/requirements.pytest-embedded.txt

或者单独安装缺失的两个核心插件:

pip install pytest-embedded-idf pytest-embedded-qemu

3. 验证VSCode的ESP-IDF扩展配置

打开VSCode的设置(Cmd+,),搜索ESP-IDF相关配置:

  • 确认ESP-IDF: Path指向你实际的ESP-IDF安装目录
  • 确认ESP-IDF: Python Path指向虚拟环境中的Python可执行文件

4. 重新加载VSCode窗口

完成以上步骤后,按Cmd+Shift+P,选择Developer: Reload Window,让所有配置和依赖生效,再打开pytest_hello_world.py,导入错误应该就会消失了。


附你提供的报错文件代码:

# SPDX-License-Identifier: CC0-1.0

import hashlib
import logging
from typing import Callable

import pytest
from pytest_embedded_idf.dut import IdfDut
from pytest_embedded_qemu.app import QemuApp
from pytest_embedded_qemu.dut import QemuDut


@pytest.mark.supported_targets
@pytest.mark.preview_targets
@pytest.mark.generic
def test_hello_world(
    dut: IdfDut, log_minimum_free_heap_size: Callable[..., None]
) -> None:
    dut.expect('Hello world!')
    log_minimum_free_heap_size()


def verify_elf_sha256_embedding(app: QemuApp, sha256_reported: str) -> None:
    sha256 = hashlib.sha256()
    with open(app.elf_file, 'rb') as f:
        sha256.update(f.read())
    sha256_expected = sha256.hexdigest()

    logging.info(f'ELF file SHA256: {sha256_expected}')
    logging.info(f'ELF file SHA256 (reported by the app): {sha256_reported}')

    # the app reports only the first several hex characters of the SHA256, check that they match
    if not sha256_expected.startswith(sha256_reported):
        raise ValueError('ELF file SHA256 mismatch')


@pytest.mark.esp32  # we only support qemu on esp32 for now
@pytest.mark.host_test
@pytest.mark.qemu
def test_hello_world_host(app: QemuApp, dut: QemuDut) -> None:
    sha256_reported = (
        dut.expect(r'ELF file SHA256:\s+([a-f0-9]+)').group(1).decode('utf-8')
    )
    verify_elf_sha256_embedding(app, sha256_reported)

    dut.expect('Hello world!')

备注:内容来源于stack exchange,提问作者Shrish

火山引擎 最新活动