2017-05-25 106 views
-1

我試圖從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 
---------------------------------------------------------------------- 

see full traceback

運行dumpbin /dependentscutil.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部分的元數據問題

+0

只是澄清:它適用於GNU + mingwpy? – DavidW

+0

@DavidW是的,在切換二進制文件和Wheel構建工具鏈之前完美工作。 – urschrei

回答

0

這似乎是由Conda安裝的virtualenv問題。我不知道如何解決它,所以我停止使用由conda安裝的virtualenv。