Невозможно вызвать пользовательский модуль с помощью Python/C API

Структура файла:

Foo/
     list.so
     main.cpp
     list.cpp
     boost_wrapper.cpp

main.cpp код:

#include <Python.h>
#include "list.cpp"


int main(int argc, char *argv[]){


    PyObject *pimport;
    pimport=PyString_FromString("list");
    Py_SetProgramName(argv[0]);
    Py_Initialize();
    PyImport_Import(pimport);
    /*PyRun_SimpleString("l=list.LinkedList()");
    PyRun_SimpleString("l.insert(\"N\", 9)");
    PyRun_SimpleString("l.display()");*/
    Py_Finalize();      
}

ОШИБКА:

ImportError: No module named list

Однако, если я запускаю python из bash, я могу успешно импортировать модуль и использовать все определенные функции. Я также пытался импортировать, используя только PyRun_SimpleString, но безрезультатно.

Я подозреваю, что текущий рабочий каталог невидим для интерпретатора Python, вызываемого Py_Initialize().


person Nihal Harish    schedule 04.07.2014    source источник
comment
Почему вы включаете list.cpp в main.cpp? Как вы создали list.so?   -  person user4815162342    schedule 04.07.2014
comment
list.cpp содержит определение и функции связанного списка. list.so был создан после написания оболочки boost::python для list.cpp. И да, список импорта работает в IDLE, когда я запускаю его из того же каталога.   -  person Nihal Harish    schedule 04.07.2014
comment
Хорошо, у меня есть рабочее решение; но я уверен, что это худшая реализация. решение   -  person Nihal Harish    schedule 04.07.2014
comment
Возможно, вам нужно добавить . к sys.path, после чего PyImport_Import будет работать.   -  person user4815162342    schedule 04.07.2014


Ответы (1)


Добавьте эти строки после Py_Initialize();, чтобы добавить свой PYTHONPATH

PyRun_SimpleString("import sys");
PyRun_SimpleString("sys.path.append(\".\")");
person visne    schedule 13.08.2018