我有用C編寫的Python擴展模塊。我想在此C代碼中使用其中一個標準Python模塊,例如os
或shutil
。最好如何做到這一點?從Python C擴展中導入和使用標準Python模塊
4
A
回答
7
PyObject* os = PyImport_ImportModuleNoBlock("os");
if (os == NULL)
return NULL;
someattr = PyObject_GetAttrString(os, "someattr");
Py_DECREF(os);
如果導入模塊只有一次例如,在init_yourmodule()
功能,然後使用PyImport_ImportModule("os")
。
1
不要。
相反,改變你的擴展模塊,以便它爲Python提供服務,然後編寫調用os
,shutil
和你的模塊的Python代碼。
實際上,對於os
模塊中的很多內容,最好編寫本地C代碼而不是調用Python。
當然,you can call Python modules from C code,只是這樣做對於像os
和shutil
這樣的低級模塊來說是過分的。當談到shutil
中的文件複製方法時,在C代碼中重新實現它們是很簡單的。事實上,在Windows上,通過調用操作系統來完成複製文件,所以沒有太多的代碼甚至不需要用C編寫。
如果Python模塊是用C語言編寫的,甚至可以複製代碼你需要的方法。
相關問題
- 1. 用C模塊擴展python
- 2. 在C++中使用擴展導入Python
- 3. Pydev導入標準Python模塊
- 4. 在Python中導入和使用模塊
- 5. 標準差的python c擴展
- 6. Python導入:導入一個沒有.py擴展名的模塊?
- 7. 如何構建一個Python C擴展,以便從模塊中導入它
- 8. 使用SWIG的Python C++擴展 - 通過導入模塊調用函數
- 9. 使用distutils構建Python擴展模塊
- 10. 爲Windows構建Python C擴展模塊
- 11. 嵌套的Python C擴展/模塊?
- 12. 作爲Python擴展模塊的C++ API
- 13. 不確定如何從Python標準庫導入模塊
- 14. 擴展黑盒python模塊
- 15. 從模塊導入Python
- 16. 從Bash導入Python模塊
- 17. Python和C擴展
- 18. c擴展中的python日誌記錄模塊的使用
- 19. 組合Python和Ruby擴展模塊
- 20. 如何擴展python模塊? (python-twitter)
- 21. 如何將C++ python擴展導入到另一個目錄中的模塊中?
- 22. 無法導入python擴展
- 23. Python dll擴展導入
- 24. 在Jython中導入非標準的Python模塊
- 25. Python模塊導入*
- 26. Python模塊導入
- 27. 導入Python模塊
- 28. Python導入模塊
- 29. python導入模塊
- 30. numpy in Python 3.6:導入多陣列numpy擴展模塊失敗
複雜的擴展模塊有時需要做一些已經在stdlib中實現的東西。在C中重新實現它們或者重構代碼是一件很遺憾的事情 – zaharpopov 2012-02-11 07:37:19