我試圖從GNU + mingwpy切換到MSVC工具鏈來構建我的輪子,其中包括圍繞二進制的Cython包裝。使用MSVC Cython擴展內置的輪子找不到模塊
我已經在Appveyor中構建了帶有MSVC工具鏈的外部DLL,並且在Appveyor中,我還有輪子構建步驟working。構建步驟完成後,我做了以下測試:
- 安裝和激活一個乾淨的virtualenv
- 安裝依賴
- 安裝我剛建
- 輪運行
nosetests wheelname
但是,這是現在失敗:
======================================================================
ERROR: Failure: ImportError (No module named cutil)
----------------------------------------------------------------------
Traceback (most recent call last):
File "C:\Miniconda\envs\test_env\lib\site-packages\nose\loader.py", line 418, in loadTestsFromName
addr.filename, addr.module)
File "C:\Miniconda\envs\test_env\lib\site-packages\nose\importer.py", line 47, in importFromPath
return self.importFromDir(dir_path, fqname)
File "C:\Miniconda\envs\test_env\lib\site-packages\nose\importer.py", line 94, in importFromDir
mod = load_module(part_fqname, fh, filename, desc)
File "C:\projects\simplification\simplification\test\test.py", line 5, in <module>
from simplification.cutil import simplify_coords as csimplify_coords
ImportError: No module named cutil
----------------------------------------------------------------------
運行dumpbin /dependents
上cutil.pyd
似乎顯示出我所料:
Dump of file simplification/cutil.pyd
File Type: DLL
Image has the following dependencies:
rdp.dll
python27.dll
MSVCR90.dll
KERNEL32.dll
Summary
4000 .data
2000 .rdata
3000 .reloc
12000 .text
哪裏rdp.dll
是外部的二進制我與用Cython包裝。 這裏怎麼回事?
更新:我的模塊還可以導入使用Ctypes
二進制,當我禁用我的測試腳本用Cython特定的進口和測試,一切正常。所以我知道我的外部二進制文件是OK的。我仍然對感到困惑,爲什麼導入失敗,特別是當Cython構建步驟cutil.pyd
完成時,並且dumpbin說它正在尋找它在正確位置(即在同一目錄中)的rdp.dll
依賴關係。
更新2:運行dumpbin
在一個已經建有一個GNU工具鏈cutil.pyd
給出如下:
Dump of file simplification/cutil.pyd
File Type: DLL
Image has the following dependencies:
msvcr90.dll
python27.dll
KERNEL32.dll
USER32.dll
rdp.dll
Summary
1000 .CRT
1000 .bss
3000 .data
1000 .edata
2000 .idata
1000 .pdata
4000 .rdata
1000 .reloc
1000 .rsrc
1E000 .text
1000 .tls
1000 .xdata
但我不知道依賴訂單是否顯著還是在Summary
部分的元數據問題
只是澄清:它適用於GNU + mingwpy? – DavidW
@DavidW是的,在切換二進制文件和Wheel構建工具鏈之前完美工作。 – urschrei