Я разрабатываю пакет, который требует привязки 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. Возможно ли это?