Buildroot Python依赖项(_sqlite3)

2024-10-02 06:38:14 发布

您现在位置:Python中文网/ 问答频道 /正文

完整免责声明:过去6周我一直在使用buildroot。这是我对嵌入式Linux的第一次介绍,因此我还是个新手,但我自己已经解决了99%的问题。在很大程度上,这一过程是直截了当的

所以,当我被困在家里无法工作时,我一直在做一个嵌入式硬件项目。我已经选择了我的硬件,构建了一个原型,学习了buildroot基础知识,提出了基本系统,优化了内核配置,为我的硬件构建了一个定制的设备树,到目前为止我都很高兴

同时,我一直在桌面上用python编程目标应用程序,它依赖于几个库(硬件抽象、通信、显示等),但相对来说比较简单

我已经有了一个必要的包列表,可以构建到我的buildroot系统中。buildroot工具在这里使用scanpypi工具非常好:

~/buildroot$ utils/scanpypi diskcache -o package

只需将所有依赖项添加到/package/config.in中,就可以在menuconfig中选择它们并添加到配方中

问题出现在构建时,对于python diskcache之上的模块,python模块的构建失败

它依赖于一些东西,但有一个是slqite3,它被添加为: 核心python模块“sqlite模块” 外部包“python-pysqlite3” 图书馆>;数据库>;sqlite

但是,它在构建时失败:

>>> python-diskcache 4.1.0 Building
Traceback (most recent call last):
File "setup.py", line 5, in <module>
import diskcache
File "/home/buildroot/output/build/python-diskcache-4.1.0/diskcache/__init__.py", line 9, in <module>
from .core import Cache, Disk, EmptyDirWarning, JSONDisk, UnknownFileWarning, Timeout
File "/home/buildroot/output/build/python-diskcache-4.1.0/diskcache/core.py", line 14, in <module>
import sqlite3
File "/home/buildroot/output/host/arm-buildroot-linux-uclibcgnueabihf/sysroot/usr/lib/python3.8/sqlite3/__init__.py", line 23, in <module>
from sqlite3.dbapi2 import *
File "/home/buildroot/output/host/arm-buildroot-linux-uclibcgnueabihf/sysroot/usr/lib/python3.8/sqlite3/dbapi2.py", line 27, in <module>
from _sqlite3 import *
ModuleNotFoundError: No module named '_sqlite3'
make[1]: *** [package/pkg-generic.mk:269: /home/buildroot/output/build/python-diskcache-4.1.0/.stamp_built] Error 1
make: *** [Makefile:84: _all] Error 2

在寻找解决方案时,似乎_sqlite3是python外部的C模块,用于与sqlite数据库通信。它应该与python一起安装(使用3.8),并且应该在buildroot中启用核心sqlite模块

discussion 1discussion 2

有几个修复程序可以在主机上处理此问题(例如,apt get install libsqlite3 dev和重新安装/重新配置python)。显然,这在映像中是不可能的,sqlite和python3安装都是最新版本,并且在构建时安装到映像中

我真的很难理解这个问题,或者我该如何解决它。我有一些基于讨论的理论,但我不确定

1)python是在sqlite之前安装到映像中的,因此相应的模块没有将cp或符号链接安装到python安装中

2)在构建时没有满足某些其他未知依赖项,并且该依赖项以静默方式失败

任何想法或帮助都将不胜感激

谢谢


Tags: 模块inpyimportpackagehomeoutputsqlite
1条回答
网友
1楼 · 发布于 2024-10-02 06:38:14

问题在于,构建机器上的Python会找到交叉编译的sqlite3模块,它无法加载该模块,因为它用于错误的体系结构

这通常不会发生,因为安装脚本通常不会去加载它试图构建/安装的包

一种解决方法是安装diskcache所有依赖项的主机版本,并在DISKCACHE_ENV中设置PYTHONPATH=$(HOST_DIR)/lib/python$(PYTHON3_VERSION_MAJOR)/:$(PYTHON3_PATH)。但是,这可能会导致各种其他破损

因此,更好的解决方案是修补diskcache的setup.py脚本,这样它就不会尝试导入diskcache本身。它可能只是为了得到一个版本号或类似的东西;这可以通过将版本号移动到单独的文件中并加载该文件来解决

相关问题 更多 >

    热门问题