Python C api PyImport_importmodule завершается ошибкой, когда в файле есть оператор импорта

Я пытался использовать 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: Нет модуля с именем будущее

Спасибо!

1

Решение

Вызов функции для 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"));
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]