带有fortran扩展的python包的conda-forge配方不适用于appveyor
Posted
技术标签:
【中文标题】带有fortran扩展的python包的conda-forge配方不适用于appveyor【英文标题】:conda-forge recipe for python package with a fortran extension not working on appveyor 【发布时间】:2018-11-07 19:05:17 【问题描述】:我正在尝试获取 conda-build 配方以通过 conda-forge/staged-recipes 上的所有 CI 测试。这是pull request 的链接。python 包有一个fortran 扩展,并使用setup.py 中的numpy.distutils 来构建扩展。 Linux 的 Circle CI,OSX 的 Travis-CI 通过,但我无法让 Appveyor for Windows 使用 conda-build 配方。
当使用 Miniconda 为 Windows 构建 Appveyor 和为 OSX and Linux 构建 Travis CI 构建包 repo 时,一切正常并且测试通过。我还可以让 conda-build 配方在 Windows 和 Linux 上本地工作,但正如您从 conda-forge 的拉取请求中看到的那样,使用 Appveyor 的 Windows 没有通过测试。
导入测试无法加载ImportError: DLL load failed: The specified module cannot be found.
的fortran 扩展扩展模块被复制到站点包目录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
而不是--compiler=msvc
提到的here。那仍然没有用。在阅读了this 之后,我还在主机和运行部分添加了zlib
,但这并没有帮助。
非常感谢任何有关在 Appveyor 上获得带有 fortran 扩展的 python 包的 conda-build 配方的提示。以防万一,windows 的 setup.py
文件中的编译器参数将复制到下方。
if os.name == "nt":
compile_args = ["-static-libgcc", "-Wall", "-shared"]
【问题讨论】:
【参考方案1】:问题在于 dll 和 .pyd 文件以及编译器规范之间的差异。看了conda-forge-pinningconda_build_config.yaml之后,选择mingw而不是msvc的方法是:
requirements:
build:
- compiler('fortran')
- compiler('m2w64_c') # [win]
- compiler('m2w64_fortran') # [win]
【讨论】:
以上是关于带有fortran扩展的python包的conda-forge配方不适用于appveyor的主要内容,如果未能解决你的问题,请参考以下文章