2009-05-18 21 views
1

我試着在一些C代碼初始化模塊Pootle後PyImport_Import VS進口

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

更換

PyRun_SimpleString("import Pootle"); 

。第一個似乎使名稱Pootle可用於後續PyRun_SimpleString調用,但第二個沒有。

有人可以向我解釋一下這個區別嗎?有沒有辦法做第一次用C API調用?

感謝

回答

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);