带有fortran扩展名的python包的conda-forge配方在appveyor上不起作用

时间:2018-11-07 19:05:17

标签: anaconda conda appveyor miniconda conda-build

我正在尝试获取一份conda构建配方,以通过conda-forge / staged-recipes上的所有CI测试。这是pull request的链接python软件包具有fortran扩展名,并在setup.py中使用numpy.distutils来构建扩展名。适用于Linux的Circle CI,适用于OSX的Travis-CI,但我无法让Windows的Appveyor使用conda构建方法。

将Miniconda用于Windows的Appveyor构建和OSX and Linux的Travis CI构建用于软件包回购时,一切正常,测试通过。我还可以获取conda-build配方,使其在Windows和Linux上本地运行,但是正如您从对conda-forge的拉取请求中所看到的那样,使用Appveyor的Windows测试无法通过。

导入测试无法用ImportError: DLL load failed: The specified module cannot be found.加载fortran扩展扩展模块被复制到site-packages目录copying build\lib.win-amd64-3.6\timml\besselaesnew.cp36-win_amd64.pyd C:\bld\timml_1541596078787\_h_env\Lib\site-packages\timml,所以我很困惑为什么找不到它。我read关于.pyd和dll的区别,并尝试使用--compiler=mingw32代替here所说的--compiler=msvc。那仍然没有用。在阅读了this之后,我还向主机和运行部分添加了zlib,但这没有帮助。

在Appveyor上使用fortran扩展获取有关python软件包的conda构建食谱的任何技巧将不胜感激。如果需要,可以在下面复制Windows setup.py文件中的编译器args。

if os.name == "nt": compile_args = ["-static-libgcc", "-Wall", "-shared"]

1 个答案:

答案 0 :(得分:0)

问题出在dll和.pyd文件以及编译器规范之间的差异。看了conda-forge-pinning conda_build_config.yaml之后,选择mingw而不是msvc的方法是:

requirements:
  build:
    - {{ compiler('fortran') }}
    - {{ compiler('m2w64_c') }}  # [win]
    - {{ compiler('m2w64_fortran') }}  # [win]