python - python C API重新載入模塊

  显示原文与译文双语对照的内容

我使用 python 3.4和可視化 2010. 我使用C API嵌入了 python,給用戶一些腳本能力來處理他的數據。 我從 C++ 代碼中調用由用戶定義的python 函數。 我調用 Apply() 之類的特定函數,用戶必須在 python 文件中定義。 假設用戶有一個文件 test.py,其中定義了處理某些數據的function Apply() 。 我只需要導入 MODULE,從 C++ 中獲取"指針"的python 函數。


PySys_SetPath(file_info.absolutePath().toUtf8().data()));
m_module = PyImport_ImportModule(module_name.toUtf8().data());
if (m_module)
{
 m_apply_function = PyObject_GetAttrString(m_module,"Apply");
 m_main_dict = PyModule_GetDict(m_module);
}

到目前為止,很好。但是如果用戶修改腳本,新版本的函數將永遠不會被考慮在內。 我得重啟我的程序才能讓它工作。 我讀到了我需要重新載入 MODULE的地方,然後在函數上獲得新指針,但PyImport_ReloadModule返回"導入錯誤"。


//.... code.. ..
//Reload the module
m_module = PyImport_ReloadModule(m_module);

有什麼想法最好是 Poukill?

时间: 原作者:

答案是在我的第一篇文章( 感謝你的J.F 塞巴斯蒂安)的評論中找到的,PySys_SetPath 也必須包含 PYTHONPATH 。 這就是為什麼 PyImport_ReloadModule 失敗的原因。


QString sys_path = file_info.absolutePath() +";" +"C:Python34Lib";
PySys_SetPath(UTF8ToWide(sys_path.toUtf8().data()));
m_module = PyImport_ReloadModule(m_module);//Ok!

原作者:
...