#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 и для выполнения зависящего рецепта? Какой из них действительно следует использовать — хост-систему или собственную? Как я могу контролировать, какой из них используется?