我正在尝试获得一个 conda-build 配方,以通过 conda-forge/staged-recipes 上的所有 CI 测试。这是拉取请求的链接python 包有一个 fortran 扩展,并使用setup.py 中的numpy.distutils来构建扩展。Linux 的 Circle CI,OSX 的 Travis-CI 传递,但我无法让 Appveyor for Windows 与 conda-build 配方一起工作。
当将 Miniconda 用于Windows的 Appveyor 构建和用于OSX 和 Linux 的Travis CI 构建用于包 repo 时,一切正常并且测试通过。我还可以让 conda-build 配方在 Windows 和 Linux 上本地工作,但正如您从 conda-forge 的拉取请求中看到的那样,使用 Appveyor 的 Windows 测试没有通过。
导入测试无法加载 fortran 扩展,ImportError: DLL load failed: The specified module cannot be found.
扩展模块被复制到 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
,所以我很困惑为什么找不到它。我阅读了 .pyd 和 dll 之间的差异,并尝试--compiler=mingw32
代替这里--compiler=msvc
提到的。那还是不行。我还添加到主机和运行部分,读完这篇文章后,那没有帮助。zlib
任何有关在 Appveyor 上使用 fortran 扩展的 python 包的 conda-build 配方的提示都将不胜感激。setup.py
Windows 文件中的编译器参数在下面复制,以防万一。
if os.name == "nt": compile_args = ["-static-libgcc", "-Wall", "-shared"]
问题在于 dll 和 .pyd 文件之间的差异以及编译器规范。查看conda - forge -pinning conda_build_config.yaml 后,选择 mingw 而不是 msvc 的方法是:
requirements:
build:
- {{ compiler('fortran') }}
- {{ compiler('m2w64_c') }} # [win]
- {{ compiler('m2w64_fortran') }} # [win]
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句