如何在Yocto配方中用pip安装无setup.py的pyadi-iio包?
解决Yocto中用pip安装pyadi-iio 0.0.15的缓存权限问题
核心问题原因
pyadi-iio 0.0.15弃用了setup.py,必须通过pip install .安装;而Yocto构建环境中,pip默认会尝试访问用户目录下的~/.cache/pip,但构建沙箱中的用户通常没有该目录的读写权限,导致报错。
配方修改步骤
1. 替换继承模块
移除原配方中的inherit setuptools3,改为继承Python3 pip相关模块:
inherit python3base python3pip
2. 自定义do_install函数
覆盖默认安装逻辑,用pip直接安装源码,同时通过以下两种方式解决缓存权限问题:
方案一:完全禁用缓存(推荐)
直接跳过pip缓存,彻底避免权限问题:
do_install() { pip3 install . \ --no-deps \ --prefix=${D}${prefix} \ --no-cache-dir }
方案二:指定临时缓存目录
如果需要缓存依赖以加快重复构建速度,可将缓存目录设置到Yocto构建工作目录下:
do_install() { mkdir -p ${WORKDIR}/pip_cache pip3 install . \ --no-deps \ --prefix=${D}${prefix} \ --cache-dir=${WORKDIR}/pip_cache }
3. 调整依赖项
确保配方的DEPENDS中包含pip工具:
DEPENDS = "python3-pip"
4. 确认源码源
确保SRC_URI指向pyadi-iio 0.0.15的源码包,例如:
SRC_URI = "https://files.pythonhosted.org/packages/source/p/pyadi-iio/pyadi-iio-0.0.15.tar.gz" SRC_URI[sha256sum] = "填入对应版本的SHA256校验值"
关键参数说明
--no-deps:禁止pip自动安装依赖,确保所有依赖由Yocto的其他配方管理,符合构建规范--prefix=${D}${prefix}:指定安装路径到Yocto的临时根文件系统目录,确保后续打包正确--no-cache-dir:完全禁用pip缓存,避免任何与缓存目录相关的权限问题
内容的提问来源于stack exchange,提问作者ThePumkinMelon
相关产品推荐
相关产品推荐

