Встраивание Python в C ++: не удается импортировать из того же каталога

0

В более крупном классе у меня есть раздел кода для импорта скрипта python и его запуска. Файл (animate.py) содержится в том же каталоге, что и исполняемый файл.

void classname::show( void )
{
         stringstream run_cmd;
         run_cmd << "animate.run('" << name << "')";

         Py_Initialize();
         PyRun_SimpleString("import animate");
         PyRun_SimpleString(run_cmd.str().c_str());
         Py_Finalize();
}

Дело в том, что я работаю через два компьютера, когда они скомпилированы на одном из них, это прекрасно работает. На моем личном ноутбуке он не может импортировать scipt с ошибкой:

Traceback (most recent call last):
  File "<string>", line 1, in <module>
ImportError: No module named animate
Traceback (most recent call last):
  File "<string>", line 1, in <module>
NameError: name 'animate' is not defined

Они оба скомпилированы с помощью одного и того же файла makefile с использованием флага -lpython2.7. Структура файла также одинаков.

Есть ли какая-то библиотека, которую мне не хватает, чтобы сделать это?

Теги:

1 ответ

1
Лучший ответ

Вам нужно добавить текущий рабочий каталог в Python-путь (он не включается по умолчанию):

     Py_Initialize();
     PyObject *sys_path = PySys_GetObject("path");
     PyList_Append(sys_path, PyString_FromString("."));
     PyRun_SimpleString("import animate");
     PyRun_SimpleString(run_cmd.str().c_str());
     Py_Finalize();
  • 0
    Это, безусловно, работает для возможности импорта скрипта, но теперь этот скрипт не может импортировать numpy и т. Д. Должен ли я также указать путь для этого?
  • 0
    Также мне все еще любопытно, почему это работает на другой машине нормально без установки пути, но не на этой.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню