#python #c
#python #c
Вопрос:
У меня есть программа на C , которая вызывает функцию python. Он отлично работает, когда скрипты python находятся в простых каталогах, но когда я создаю из них zip-пакет, PyImport_Import не может найти модуль. У меня следующая структура файла:
A <dir>
|
| -- pack.zip
| -- __init__.py
| -- __main__.py
| -- asdf.py
| -- subdir <dir>
| -- __init__.py
| -- qwer.py
| -- prog.cpp
Запуск prog.cpp (prog.exe ) следует вызвать функцию из asdf.py:
void func()
{
setenv("PYTHONPATH", "../A/pack.zip", 1);
Py_Initialize();
PyObject* moduleName = PyUnicode_DecodeFSDefault("asdf");
PyObject* module = PyImport_Import(moduleName);
if(module != nullptr) {
PyObject* pyFunc = PyObject_GetAttrString(module, "f");
if(pyFunc != nullptr amp;amp; PyCallable_Check(pyFunc)) {
PyObject* result = PyObject_CallObject(pyFunc, nullptr);
}
}
Py_Finalize();
}
Я пробовал разные пути в setenv (только каталог A, zip-файл без расширения «zip»), а также разные имена модулей ( pack.zip пакет, __main__
, который, я полагаю, проблематичен из-за __main__
модуля, созданного с помощью Py_Initialize), но ничего не сработало, он не смог найти модуль.
Когда я запускаю zip-пакет (пакет python), он работает нормально. Как я уже упоминал, если я использую каталог ‘pack’ вместо zip, это работает.
Как я должен встраивать пакет python в C ?