PyImport_Import не импортирует функцииPython

Программы на Python
Ответить
Anonymous
 PyImport_Import не импортирует функции

Сообщение Anonymous »

Я пишу код, который позволяет авторам плагинов для нашего программного обеспечения встраивать код Python в свои плагины. И у меня странное поведение при импорте.
Когда я импортирую этот простой файл Python с помощью PyImport_Import, я ожидаю, что полученный PyObject будет иметь проверку атрибутов который можно вызвать, а также некоторые атрибуты, такие как __name__ и т. д.

Код: Выделить всё

def test(x, y):
return x+y
Вместо этого в результатах PyObject_Dir отображаются только атрибуты __something__ и нет теста. И дело не только в PyObject_Dir: когда я пытаюсь получить доступ к test по имени, он тоже не найден.
Вот как выглядит мой код (проверка ошибок удалена) для читабельности)

Код: Выделить всё

    PyObject* sysModule = PyImport_ImportModule("sys");
PyObject* sysPath = PyObject_GetAttrString(sysModule, "path");
PyObject* objPath = PyUnicode_FromString(modulePath.c_str());
PyList_Append(sysPath, objPath);
Py_XDECREF(objPath);
Py_DECREF(sysPath);

PyObject_SetAttrString(sysModule, "dont_write_bytecode", Py_True);
Py_DECREF(sysModule);

PyObject* modName = PyUnicode_FromString(name.c_str());
PyObject* module = PyImport_Import(modName);
Py_DECREF(modName);

PyObject* contents = PyObject_Dir(module);

auto size = PyList_Size(contents);
for (auto index = 0; index < size; ++index)
{
PyObject* itemName = PyList_GetItem(contents, index);
PyObject* item = PyObject_GetAttr(module, itemName);
if (!item)
{
continue;
}

PyObject* bytes = PyUnicode_AsUTF8String(itemName);
std::string strName = PyBytes_AsString(bytes);
Py_DECREF(bytes);
log(strName);

if (PyCallable_Check(item))
{
log("Callable!");
}
Py_DECREF(item);
}
Когда я импортирую этот файл из консоли Python, все в порядке. Объект модуля не равен нулю. Что еще может быть не так?
Полагаю, это может быть связано с тем, что я делаю это внутри субинтерпретатора. Но мне не удалось найти никакой документации, объясняющей это: все, что я нашел, это объяснение того, что импортированные модули различаются между субинтерпретаторами, но нет никаких указаний на то, что сам импорт в этом случае работает по-разному.

Подробнее здесь: https://stackoverflow.com/questions/791 ... -functions
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»