Использование модуля Python cffi в рецепте Yocto

#python #yocto #python-cffi

Вопрос:

Я пытаюсь использовать модуль cffi Python в рецепте Yocto/OE. Я хочу использовать модуль в рецепте, а не включать его в целевое изображение.

Он работает на моем локальном компьютере, но на нашем сервере сборки происходит сбой со следующим сообщением:

 Exception: Exception: Version mismatch: this is the 'cffi' package version 1.14.5, located in '<build directory of recipe that uses cffi>/1.0-r0/recipe-sysroot-native/usr/lib/python3.8/site-packages/cffi/api.py'.  When we import the top-level '_cffi_backend' extension module, we get version 1.11.5, located in '/usr/lib/python3/dist-packages/_cffi_backend.cpython-36m-x86_64-linux-gnu.so'.  The two versions should be equal; check your installation.
 

Проблема, по-видимому, в том, что на сервере сборки есть две версии Python. На главной машине установлена версия 3.6. И OE также создает саму версию 3.8 («родную»). Что происходит, так это то, что серверная часть cffi построена с использованием собственной версии Python. (Сценарий setup.py , который, по-видимому, управляет процессом сборки для серверной части, явно вызывает собственный Python distutils3.bbclass .)

Однако задача в рецепте, в котором я хочу использовать cffi, выполняется с помощью основного Python, хотя я наследую python3native . Эта версия, похоже, ищет общие библиотеки там /usr/lib/python3 , где она находит устаревшую версию серверной части cffi.

Почему разные версии Python используются для создания cffi и для выполнения зависящего рецепта? Какой из них действительно следует использовать — хост-систему или собственную? Как я могу контролировать, какой из них используется?