В более крупном классе у меня есть раздел кода для импорта скрипта 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
. Структура файла также одинаков.
Есть ли какая-то библиотека, которую мне не хватает, чтобы сделать это?
Вам нужно добавить текущий рабочий каталог в 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();