Рецепт conda-forge для пакета python с расширением fortran, не работающим на appveyor

Я пытаюсь получить рецепт сборки conda, чтобы пройти все тесты CI на рецептах conda-forge/staged-recipes. Вот ссылка на запрос на извлечение. Пакет python имеет расширение fortran и использует numpy.distutils в setup.py для сборки расширения. Обведите CI для Linux, Travis-CI для OSX, но я не могу заставить Appveyor для Windows работать с рецептом conda-build.

При использовании Miniconda для сборки Appveyor для Windows и сборки Travis CI для OSX и Linux для репозитория пакетов все работает и тесты проходят. Я также могу заставить рецепт conda-build работать локально в Windows и Linux, но, как вы можете видеть из запроса на получение conda-forge, тесты не проходят для Windows с использованием Appveyor.

Тест импорта не может загрузить расширение 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 к разделу host and run, прочитав это и это не помогло.

Будем весьма благодарны за любые советы, как получить рецепт conda-build для пакета python с расширением fortran, работающего на Appveyor. Компилятор аргументы в setup.py Файл для Windows копируется ниже в случае, если это имеет значение.

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

1 ответ

Решение

Проблема заключалась в разнице между файлами dll и.pyd и спецификацией компилятора. После просмотра conda-forge-pinning conda_build_config.yaml, способ выбрать mingw вместо msvc:

requirements:
  build:
    - {{ compiler('fortran') }}
    - {{ compiler('m2w64_c') }}  # [win]
    - {{ compiler('m2w64_fortran') }}  # [win]
Другие вопросы по тегам