You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Yocto 2.6 Thud下pipoe生成的pydantic recipe编译报错如何解决

问题根因

Yocto 2.6 Thud版本默认提供的原生Python3版本为3.5,你当前使用的pydantic 1.8.2的setup.py使用了Python3.6才引入的f-string语法,构建阶段调用宿主端python3执行setup.py时触发语法错误。

无需修改源码的解决方案

以下方案均不需要改动pydantic上游源码:

  • 方案1:降级pydantic到兼容Python3.5的版本
    pydantic 1.5.x是最后一个支持Python3.5的发布分支,仅需修改recipe中的版本、源码地址、校验和字段即可,适配后可完全兼容默认Thud构建环境,修改示例如下:
SRC_URI = "https://files.pythonhosted.org/packages/7a/3c/39d32372771c63f02f60500d62d0c79391a793bfab46ca93869678977c4a/pydantic-1.5.1.tar.gz"
SRC_URI[md5sum] = "cf3966776c621b025a8922dbdc803e8f"
SRC_URI[sha256sum] = "f00186130c6300bc617c67c9e6e997a351914d974134c657b12c982a560295c3"
S = "${WORKDIR}/pydantic-1.5.1"

原有RDEPENDS配置保留即可。

  • 方案2:指定构建用高版本Python3
    若必须使用pydantic 1.8.2及以上版本,可先将Yocto中的python3-native组件升级到3.6及以上版本,再在现有recipe中添加如下配置,指定构建阶段调用高版本Python执行setup.py:
DEPENDS += "python3-native"
SETUPTOOLS3_BUILD_VARS = "PYTHON=${STAGING_BINDIR_NATIVE}/python3"
  • 方案3:添加配置钩子自动适配语法
    若既不想降级pydantic也不想升级全局Python版本,可在recipe中添加配置钩子,在构建前自动替换setup.py中的f-string为兼容Python3.5的语法,添加如下代码到recipe即可:
do_configure_prepend() {
    sed -i 's/f'\''.. _#{id}: https://github.com/samuelcolvin/pydantic/issues/{id}'\''/".. _#{}: https://github.com/samuelcolvin/pydantic/issues/{}".format(id, id)/g' ${S}/setup.py
}

该钩子仅临时修改构建目录下的代码文件,不会改动原始源码压缩包。

内容的提问来源于stack exchange,提问作者Topper

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 08:00:04