Сборка root Python Зависимости (_sqlite3) - PullRequest
2 голосов
/ 07 мая 2020

Полный отказ от ответственности: я использую сборку root в течение последних 6 недель. Это мое первое знакомство со встроенным Linux, поэтому я все еще очень экологичный, но смог решить 99% своих проблем сам. по большей части процесс был простым.

Итак, чтобы занять себя, пока я застрял, дома и не могу работать, я работал над проектом встроенного оборудования. Я выбрал свое оборудование, построил прототип, изучил основы сборки root, поднял базовую c систему, оптимизировал конфигурацию ядра, построил собственное дерево устройств для своего оборудования, и я доволен до этого момента.

Параллельно я программировал целевое приложение в python на моем рабочем столе, это зависит от нескольких библиотек (абстракция оборудования, коммуникация, отображение и т. Д. c), но относительно прямолинейно.

Я дошел до того момента, когда у меня есть список необходимых пакетов для встраивания в мою систему сборки root. Инструменты сборки root отлично подходят для использования с инструментом scanpypi:

~/buildroot$ utils/scanpypi diskcache -o package

Простое добавление всех зависимостей в /package/config.in позволило выбрать их в menuconfig и добавить в рецепт.

Проблема возникает во время сборки, когда не удается построить модуль python для модуля выше python -diskcache.

Он зависит от нескольких вещей, но одна из них - slqite3, это был добавлен как: ядро ​​python модуль "sqlite module" external package "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 - это модуль C, внешний по отношению к python, для связи с базой данных sqlite. Он должен быть установлен с python (с использованием 3.8) и должен быть включен в сборке root с включением основного модуля sqlite.

обсуждение 1 обсуждение 2

Есть несколько исправлений для решения этой проблемы на хосте (например, apt get install libsqlite3-dev и переустановить / перенастроить python). Очевидно, что это невозможно в образе, и обе установки sqlite и python3 являются последними сборками и устанавливаются в образ во время сборки.

Я действительно изо всех сил пытаюсь понять проблему или как я могу исправить Это. У меня есть несколько теорий, основанных на обсуждении, но я не уверен.

1) python устанавливается в образ перед sqlite, поэтому соответствующий модуль не получает cp или символическую ссылку на python install.

2) есть некоторые другая неизвестная зависимость, не встречающаяся во время сборки, и ее тихий сбой

любые идеи или помощь будут очень признательны.

Спасибо

...