Я следовал за учебником в вики http://qt-project.org/wiki/PySide_Binding_Generation_Tutorial
но я не могу заставить его работать должным образом. Я на MacOSX
Итак, вот что я сделал:
Запустите shiboken с помощью следующей команды:
shiboken-2.7 global.h —include-paths =.: / opt / local / include / PySide-2.7: / opt / local / include —typesystem-paths = / opt / local / share / PySide-2.7 / typesystems — -output-directory = .. / FooLibBinding typesystem_foo.xml
Создайте динамическую библиотеку FooLibBinding из сгенерированного кода C ++ -> libFooLibBinding.dylib
Теперь вместо того, чтобы просто запускать интерпретатор Python из командной строки, я создал программу на C ++, которая загружала бы интерпретатор Python и открывал сценарий .py с помощью FooLib. Эта программа динамически связывается с libFooLibBinding.dylib, поэтому я предполагаю, что все символы, необходимые для работы модуля foolib, есть;)
вот код:
#include <iostream>
#include <Python.h>
int main(int argc, char* argv[])
{
///Python init
Py_SetProgramName(argv[0]);
Py_Initialize();
PySys_SetArgv(argc, argv); /// relative module import
///Try out loading the module, this is just for testing
/// -----------
PyObject *sysPath = PySys_GetObject("path");
PyObject *path = PyString_FromString("/Users/alexandre/Downloads/BindingTest");
int result = PyList_Insert(sysPath, 0, path);
PyObject *pModule = PyImport_ImportModule("foolib");
if (PyErr_Occurred())
PyErr_Print();
/// -----------
///Our python file to interpret
const char* filename = "/Users/alexandre/Downloads/BindingTest/FooLibTest/foolib_test.py";
FILE* file = fopen(filename,"r");
PyRun_SimpleFile(file,filename);
///close python
Py_Finalize();
return 0;
}
При запуске программы происходит сбой при первой загрузке модуля, говоря:
ImportError: нет модуля с именем foolib
И затем во второй раз при запуске сценария .py:
Traceback (most recent call last):
File "/Users/alexandre/Downloads/BindingTest/FooLibTest/foolib_test.py", line 1, in <module>
from foolib import FooClass
ImportError: No module named foolib
Очевидно, что он не может найти модуль, сгенерированный из привязок. Мой вопрос: что мне делать, чтобы он мог его найти?
Учебное пособие использует Makefile, но, кажется, не делает больше, чем просто связывает динамическую библиотеку привязки.
Ваш путь включения для командной строки Shiboken не включает путь к вашему foo.h. Я не могу сказать, является ли это причиной вашей проблемы, но если я сделал то же самое, он не будет генерировать следующие файлы:
…который вам, очевидно, понадобится, чтобы иметь возможность компилировать поддержку класса Maths в библиотеке foo.