Я пытаюсь выяснить, как использовать исходники на Фортране в пакете 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.