Я пытался использовать Python C API для вызова функции из Python в C ++, тест прошел успешно.
Но если я собираюсь импортировать модуль, уже импортирующий другой модуль, Pymodule_findmodule вернет Null, даже если он там и создал скомпилированный файл. Вот мой код
Py_Initialize();
PySys_SetPath("C:/Users/Mik/Documents/GitHub/youtube-dl");
PyObject * pythonFile = PyImport_ImportModule("test2");
Вот файл python с именем test2.py в этом каталоге, в котором находится файл с именем test_dl.py и класс TESTDL
from test_dl import TESTDL
def someFunction(someInput):
return 12345
Как только я добавил строку импорта, моя программа больше не распознает ее как модуль
Edit: оказывается, test_dl имеет первую строку как:
from __future__ import unicode_literals
Вот почему я получил эту ImportError: Нет модуля с именем будущее
Спасибо!
Вызов функции для PySys_SetPath()
полностью перезаписывает путь модуля Python. В результате ваш скрипт на Python test_dl
не может найти системные модули Python (в этом случае __future__
) и выбрасывает исключение.
Что вам нужно сделать, это присоединять каталог вашего модуля вместо системного пути. Для этого сначала запросите существующее значение системного пути, а затем добавьте к нему свой путь:
PyObject *sys_path = PySys_GetObject("path");
PyList_Append(sys_path, PyString_FromString("C:/Users/Mik/Documents/GitHub/youtube-dl"));
Других решений пока нет …