1
我在boost的幫助下將一些C++類暴露給python。我定義了兩個與我的應用程序靜態鏈接的不同模塊。我可以使用這些模塊中定義的類,衍生它們等當有多個Boost.Python模塊時醃製暴露的類
BOOST_PYTHON_MODULE(module1)
{
class_<MyClass, boost::noncopyable>("MyClass", no_init)
.enable_pickling();
}
然而,我不能鹹菜它們,因爲沒有涉及到泡菜中的錯誤。 __模塊__屬性對於我的類不正確。因此,泡菜無法讓課堂回來。如果我的兩個Python模塊「模塊1」和「模塊2」,和模塊1定義一個類名MyClass的,下面的代碼:
print(module1.MyClass.__name__)
print(module1.MyClass.__module__)
pickle.dumps(module1.MyClass,0)
將輸出
MyClass
module2
Traceback (most recent call last):
File "main.py", line 23, in <module>
pickle.dumps(module1.MyClass,0)
_pickle.PicklingError: Can't pickle <class 'module2.MyClass'>: attribute lookup
module2.MyClass failed
它證明了__模塊__屬性沒有爲這個類填充正確。我無法找到workarround。我沒有發現任何人有類似的問題。
感謝您的任何幫助或建議。
我不認爲你的問題與它是一個C類有關。這看起來像是與多個模塊相關的錯誤。我是否認爲這是一種嵌入情況?由於這兩個模塊都是靜態鏈接的? BP是靜態鏈接的嗎? – 2012-03-01 16:11:59
是的你是對的。這是一個嵌入情況,我應該提到這一點。 boost :: python本身並不是靜態鏈接的。在搜索了更多關於這個問題後,我發現了一個關於完全相同的問題的討論: http://www.gossamer-threads.com/lists/python/dev/255760 看來問題來自boost:python ,它已經很老了(10歲),不太可能被解決。 我發現了一個工作周:我在模塊初始化中手動設置了__模塊__字段。 – 2012-03-03 17:16:17
我很高興你找到了解決方案。如果您將其添加爲此問題的答案,則其他人可以對其進行修改。 – 2012-03-05 15:22:12