使用MSVC Cython扩展构建的轮无法找到模块

时间:2017-05-25 17:40:57

标签: python cython python-wheel

我试图从GNU + mingwpy切换到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 /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的导入和测试时,一切正常。所以我知道我的外部二进制文件没问题。我仍然感到困惑的是为什么导入失败,特别是当cutil.pyd的Cython构建步骤完成时,dumpbin说它正在寻找它的{{1依赖于正确的位置(即在同一目录中)。

更新2 :在使用GNU工具链构建的rdp.dll上运行dumpbin,可提供以下信息:

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 部分中的元数据是否重要

1 个答案:

答案 0 :(得分:0)

这似乎是Conda安装的virtualenv的一个问题。我不知道如何解决它,所以我停止使用conda安装的virtualenv。