Встраивание пакета python в C

#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 ?