我试图从GNU + mingwpy切换到MSVC工具链来构建我的轮子,其中包括围绕二进制文件的Cython包装。
我已经在Appveyor中使用MSVC工具链构建了外部DLL,并且在Appveyor中,我还有车轮构建步骤working。构建步骤完成后,我通过执行以下操作进行测试:
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的导入和测试时,一切正常。所以我知道我的外部二进制文件没问题。我仍然感到困惑的是为什么导入失败,特别是当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
部分中的元数据是否重要
答案 0 :(得分:0)
这似乎是Conda安装的virtualenv的一个问题。我不知道如何解决它,所以我停止使用conda安装的virtualenv。