我使用boost :: python將一些python代碼嵌入到應用程序中。我能夠正確評估打印語句或其他表達式,但是當我嘗試導入模塊時,它不是導入並且應用程序正在退出。此外,嵌入式代碼中的globals()函數調用也會產生運行時錯誤。如何在boost :: python嵌入式Python代碼中導入模塊?
#include <boost/python.hpp>
using namespace boost;
using namespace boost::python;
using namespace boost::python::api;
int main(void) {
Py_Initialize();
object main_module = import("__main__");
object main_namespace = main_module.attr("__dict__");
main_namespace["urllib2"] = import("urllib2");
object ignored = exec(
"print 'time'\n", main_namespace);
}
這裏,我試圖導入的urllib2使用升壓導入功能,這個編譯和運行正常,但有以下exec語句,它給出了一個錯誤。
object ignored = exec(
"print urllib2\n"
"print 'time'\n", main_namespace);
或者當我刪除boost導入函數並從嵌入代碼中進行導入時,它也會報錯。我嘗試使用一個嘗試:除了:塊,但也不起作用。這是因爲C++應用程序無法找到urllib2 py模塊的位置?有沒有辦法在嘗試導入之前設置模塊的路徑?
這是爲內部使用而構建的,因此某些路徑的硬編碼是可以接受的。
編輯:更多信息:
這就是發生了什麼事。我做了一個try ... catch,並在有任何異常時調用PyErr_Print(),並且在有模塊導入甚至函數調用時,始終將此視爲錯誤。錯誤信息:
Traceback (most recent call last):
File "<string>", line 1, in <module>
TypeError: 'NoneType' object does not support item assignment
任何人都可以想到任何原因嗎?
感謝您的迴應,並且真的是爲了延遲嘗試並告訴您,Jonas。 我試過了,但這沒有幫助。如果它有這個單一語句「print globals()\ n」,我甚至無法讓程序運行。我在Windows和Linux上嘗試了相同的代碼,並且在任何地方都有相同的響應。 我正在使用Boost 1.39.0 – Sahas 2009-06-07 05:25:01
糟糕。我沒有注意到編輯。我也會嘗試。 – Sahas 2009-06-16 04:51:52