我用於在Linux下使用Cython編譯自制python擴展。在Linux上,我使用distutils生成一個「myext.so」,然後我可以簡單地將其添加到我的PYTHONPATH
並獲得import myext
python調用。使用cython擴展一旦編譯[在Windows下],如何使用.pyd的?
現在,我試圖讓它在Windows 7下工作(使用Cython 0.18)。 我成功地運行distutils,使我現在得到一個myext.pyd
文件。但似乎(http://docs.python.org/2/faq/windows.html#is-a-pyd-file-the-same-as-a-dll)在windows下添加「myext.pyd」路徑是不夠的。 「myext.py」應該是什麼樣子,換句話說,在我的Python(2.7)安裝中獲得我的擴展的程序是什麼。
注:在已經加入含 「myext.pyd」 到PYTHONPATH目錄,我仍然得到:
python BdmLsim4.py -i model.xml
Traceback (most recent call last):
File "BdmLsim4.py", line 6, in <module>
import myext
ImportError: DLL load failed: module not found.
非常感謝。
sys.path在'ImportError'之前看起來像什麼? AFAIK將目錄放在'PYTHONPATH'中是你必須做的所有事情,所以也許你沒有正確地添加目錄。 – Bakuriu 2013-05-07 07:10:41
Sys.path = [...,'D:\\ 02_DEV \\ EVOLAB \\ EVOLAB-2013-05-02 \\ ECLIPSE-WS_ELP \\ evolab-cython \\ src \\ Spatial','D:\ \ 02_DEV \ EVOLAB \\ EVOLAB-2013-05-02 \\ ECLIPSE-WS_ELP \\ evolab-cython \\ setup','C:\\ Windows \\ system32 \\ python27.zip','C:\\ Python27 \\ DLLs',...] 其中'D:\\ 02_DEV \\ EVOLAB \\ EVOLAB-2013-05-02 \\ ECLIPSE-WS_ELP \\ evolab-cython \\ setup'是我的位置.pyd。 我檢查了由Cython生成的包含所需「PyMODINIT_FUNC initmyext(void);/* proto * /」指令的「myext.cpp」。 所以路徑似乎沒問題。可能是我的.pyd文件編譯不好。你怎麼看 ? – 2013-05-07 07:28:22
你在使用Eclipse嗎?您是否嘗試從命令提示符而不是Eclipse內運行程序? – Bakuriu 2013-05-07 07:31:38