Я разрабатываю пакет, который требует привязки Python для dgtsv
подпрограммы из библиотеки LAPACK Fortran. На данный момент я распространяю исходный файл Fortran, dgtsv.f
, вместе с моим кодом Python и используя numpy.distutils
, чтобы автоматически обернуть его и скомпилировать в общую библиотеку _gtsv.so
, которая может быть вызвана из Python.
Вот как выглядит мой файл setup.py
на данный момент:
from numpy.distutils.core import setup, Extension, build_ext
import os
fortran_sources = ["dgtsv.f"]
gtsv = Extension(
name="pyfnnd._gtsv",
sources=[os.path.join("pyfnnd", "LAPACK", ff) for ff in fortran_sources],
extra_link_args=['-llapack']
)
setup(
name='pyfnnd',
py_modules=['_fnndeconv', 'demo', '_tridiag_solvers'],
cmdclass={'build_ext': build_ext.build_ext},
ext_modules=[gtsv],
)
Обратите внимание, что для фактического использования _gtsv.so
мне все равно придется ссылаться на ранее существовавшую библиотеку LAPACK (extra_link_args=['-llapack']
). Поскольку эта библиотека уже должна содержать подпрограмму dgtsv
, мне кажется, что было бы просто просто обернуть функцию в существующей общей библиотеке, вместо того, чтобы распределять фактический источник Fortran.
Однако я никогда не сталкивался с примерами использования F2PY для переноса функций, которые являются частью общей библиотеки, а не только исходного исходного кода Fortran. Возможно ли это?