PyImport_Import против импорта

1

Я попытался заменить

PyRun_SimpleString("import Pootle");

с

PyObject *obj = PyString_FromString("Pootle");
PyImport_Import(obj);
Py_DECREF(obj);

после инициализации модуля Pootle в некотором C-коде. Первое кажется, что имя Pootle доступно для последующих вызовов PyRun_SimpleString, но второе не делает.

Разве кто-то может объяснить мне разницу? Есть ли способ сделать то, что первый делает с вызовами API C?

Спасибо

Теги:
import

1 ответ

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

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

PyRun_SimpleString автоматически работает в пространстве имен модулей __main__. Не уделяя большого внимания проверке ошибок (будьте осторожны с возвратом NULL!), Это общая схема:

PyObject *main = PyImport_AddModule("__main__");  
PyObject *obj = PyString_FromString("Pootle");
PyObject *pootle = PyImport_Import(obj);  
PyObject_SetAttrString(main, "Pootle", pootle);  

Py_DECREF(obj);
Py_XDECREF(pootle);

Ещё вопросы

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