Как я могу определить setup.py для пакета, которому требуется f90wrap, чтобы обернуть исходники Fortran? - PullRequest
0 голосов
/ 17 декабря 2018

Я пытаюсь выяснить, как использовать исходники на Фортране в пакете Python.Ранее я имел успех, используя f2py и Numpy's distutils.Это позволяет создать setup.py, который автоматически создает код на Фортране, создает .pyd файлы и размещает все в папке site-packges.Тем не менее, теперь мне нужно использовать f90wrap, потому что я использую производные типы в своем коде на Fortran, который не поддерживается непосредственно f2py.

Когда просто следую процессу, описанному в F90wrap Github README, для создания привязок Python Iполучил неопределенную ошибку символа.Эта проблема была описана следующим образом: ошибка f2py-f90wrap `неопределенный символ: __test_mod_MOD_p` .Там дается решение этой проблемы, которое включает в себя сначала создание .o файлов из исходного кода Fortran с использованием компилятора Fotran напрямую, а затем включение этих .o файлов при вызове команды f2py:

gfortran -c -O3 -fPIC test.f90
f90wrap -v -m test test.f90
f2py-f90wrap -c -m _test f90wrap_test.f90 test.o

(из https://stackoverflow.com/a/48473763/10596345)

Я действительно смог успешно создать привязки Python, используя это решение (за исключением того факта, что я использую команду f2py напрямую вместо переносимого f2py-f90wrap для третьего шага), но как мне правильно обернуть все это в работающий setup.py скрипт, который делает это автоматически и устанавливает пакет в нужном месте?

Для полноты, вот источникпростой файл test.f90, который я пытаюсь превратить в пакет Python:

module test
    type, public :: Object
        real :: number
    end type Object
contains
    subroutine test(obj)
        type(Object), intent(in) :: obj
        write(*, *) obj%number
    end subroutine test
end module test

Я хотел бы иметь возможность использовать подпрограмму test, определенную в этом файле, которая принимает производный тип Object как ввод, как функция в Python.

...