2
我PythonCode.py:無模塊命名ctypes的使用Python/C API
import os, ctypes
print "ctypes are imported"
而且CCode.c:
...
PySys_SetPath(path_to_PythonCode);
PyObject *pModule = PyImport_ImportModule("PythonCode");
if (!pModule) {
PyErr_Print();
return;
}
...
PyErr_Print()
打印:
Traceback (most recent call last): File ".../PythonCode.py", line 1,
in <module> import os, ctypes
ImportError: No module named ctypes
在終端中執行Python代碼人表明確實存在的ctypes:
$ python --version
Python 2.7.1
$ python PythonCode.py
ctypes are imported
爲什麼的Python/C API無法導入ctypes的?
這看起來像Python中經典的循環導入問題,只能通過C到達那裏。您嘗試在C中導入Python模塊,但Python模塊試圖將C庫作爲ctypes的一部分導入,因此您最終在解釋器有機會完全構建它之前嘗試從sys.modules獲取ctypes,因爲C代碼仍在執行中。這並不是說它不存在,而是在您嘗試在您的程序流中訪問它的時候,模塊的狀態不完整,因此無論是卸載還是無法加載。 –
您用單個路徑替換了默認的'sys.path'列表。相反,你可以追加或插入新的路徑:'PyObject * sysPath = PySys_GetObject(「path」); PyObject * path = PyString_FromString(path_to_PythonCode); PyList_Append(sysPath,path); //或PyList_Insert(sysPath,0,path);'(需要錯誤處理)。 – eryksun
@eryksun:謝謝!這就是訣竅!你爲什麼回答評論? – AlexP