Embedded Python 2.7.2 Импорт модуля из пользовательского каталога

Я встраиваю Python в приложение C/C++, которое будет иметь определенный API.

Приложению необходимо создавать экземпляры классов, определенных в сценарии, которые имеют примерно следующую структуру:

class userscript1:
    def __init__(self):
        ##do something here...

    def method1(self):
        ## method that can be called by the C/C++ app...etc

Раньше мне удавалось (для проверки концепции) сделать это с помощью следующего типа кода. :

PyObject* pName = PyString_FromString("userscript.py");
PyObject* pModule = PyImport_Import(pName);
PyObject* pDict = PyModule_GetDict(pModule);
PyObject* pClass = PyDict_GetItemString(pDict, "userscript");
PyObject* scriptHandle = PyObject_CallObject(pClass, NULL);

Теперь, когда я нахожусь в более производственной среде, это не работает в строке PyImport_Import - я думаю, это может быть из-за того, что я пытаюсь добавить каталог к ​​имени сценария, например

PyObject* pName = PyString_FromString("E:\\scriptlocation\\userscript.py");

Теперь, чтобы дать вам представление о том, что я пробовал, я попытался изменить системный путь перед всеми этими вызовами, чтобы он искал этот модуль. В основном пытался изменить sys.path программно:

PyObject* sysPath = PySys_GetObject("path");
PyObject* path = PyString_FromString(scriptDirectoryName);
int result = PyList_Insert(sysPath, 0, path);

Эти строки работают нормально, но не влияют на работу моего кода. Очевидно, что в моем реальном коде есть куча проверок ошибок, которые я исключил, так что не беспокойтесь об этом!

Итак, мой вопрос: как правильно направить встроенный интерпретатор на мои сценарии, чтобы я мог создавать экземпляры классов?

8
задан Amro 19 August 2012 в 22:04
поделиться