Встроенный Python не находит дистрибутивные пакетыC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Встроенный Python не находит дистрибутивные пакеты

Сообщение Anonymous »


Я запускаю встроенное приложение Python в своем проекте C++ cmake в Ubuntu 22.04. Моя установленная версия Python — 3.10, и на моем компьютере установлен Python-dev. Мой файл CMakeLists.txt содержит соответствующее включение Python:

cmake_minimum_required (ВЕРСИЯ 3.21) проект (MyPythonEmbeddedApp) find_package (Разработка интерпретатора Python3 3.10 НЕОБХОДИМЫЕ КОМПОНЕНТЫ) add_executable(my_app src/main.cpp) target_include_directories(my_app PRIVATE ${Python_INCLUDE_DIRS}) target_link_libraries (my_app Python3: Python) Тогда в моей основной программе есть следующее:

#include "Python.h" #include int main(int argc, char** argv) { Py_Initialize(); // ./ — путь к myPythonModule.py // Необходимо добавить /usr/lib/python3.10 или не удается найти базовые модули Python в скрипте // Добавление местоположения в dist-packages приводит к обнаружению valkka-onvif PySys_SetPath(L"./:/usr/lib/python3.10:/usr/local/lib/python3.10/dist-packages/"); PyObject* pythonModule = PyImport_ImportModule("myPythonModule"); Py_DECREF (модуль Python) Py_Finalize(); вернуть 0; } Приложение Python myPythonModule.py содержит следующее:

из valkka.onvif import OnVif, DeviceIO, DeviceManagement, getWSDLPath класс OnvifClass(OnVif): последовательный_порт = [] def __init__(self, ip="172.25.0.100", порт=8000, пользователь="", пароль=""): self.ip = ip self.port = порт print("Инициализированный обработчик") Я пытаюсь создать класс OnVif в Python, который будет вызываться в C++. Моя проблема в том, что при создании модуля на С++ я получаю сообщение об импорте OnVif.

"ФАТАЛЬНО: вы импортируете valkka.onvif, но у вас не установлен zeep. Пожалуйста, установите zeep с помощью pip install zeep"

Видно, что это сообщение выдается при импорте zeep: /usr/local/lib/python3.10/dist-packages/valkka/onvif/base.py

Сначала я установил valkka-onvif с помощью

sudo pip3 install valkka-onvif Он специально устанавливается под root и помещается в /usr/local, а не в каталог .local. Я также позаботился о том, чтобы Zeep был установлен в том же месте.

sudo pip3 install zeep==4.0.0 Примечание: установка последней версии Zeep несовместима с библиотекой valkka-onvif.

Вышеуказанные пакеты находятся в «/usr/local/lib/python3.10/dist-packages/». Я вижу обе папки в этом месте. Я могу запустить модуль Python из командной строки без каких-либо проблем с Python3, но при запуске встроенного способа должна отсутствовать какая-то переменная пути. Кроме того, я могу запустить скрипт Python из C++ без импорта OnVif.

В конечном итоге мой вопрос заключается в том, есть ли какой-то путь, который мне нужно установить в C++ для работы встроенного Python, и как мне это сделать? Я хотел бы импортировать модуль без каких-либо проблем. У меня нет проблем с вызовом методов Python и созданием экземпляров классов Python с помощью C++.

Обновление: Я добавил следующее после PySys_SetPath:

PyObject* sysPath = PySys_GetObject((char*)"path"); PyList_Append(sysPath, (PyUnicode_FromString("/usr/local/lib/python3.10/dist-packages"))); CleanPythonObject (sysPath); Просто документирую то, что я пытался. Теперь мой модуль не найден. Кажется, что добавление вышеизложенного каким-то образом лишило Python возможности найти его. Вышеупомянутое не обязательно решило проблему, поскольку модуль не найден и не открыт.
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»