私は、プログラムが実行されるたびに対話型コマンドプロンプトを介して大量のユーザー入力を必要とするプログラムブロックを介して実行されるいくつかのサブルーチンを実装するFortran77コードを継承しました。コードの実行を自動化したいので、すべてのサブルーチンをモジュールに移動し、F2PYを介してラッパーコードを記述しました。2ステップのコンパイル後、すべてが正常に機能します。
gfortran -c my_module.f90 -o my_module.o -ffixed-form
f2py -c my_module.o -m my_wrapper my_wrapper.f90
これにより、最終的に、、、、およびの3つのファイルが作成さmy_module.o
れます。これは、レガシーFortranコードにアクセスするためにPythonにインポートするモジュールです。my_wrapper.o
my_module.mod
my_wrapper.so
my_wrapper.so
私の目標は、このコードを科学コードのより大きなパッケージに含めることです。このパッケージには、Cythonモジュールの構築にすでにsetup.py
使用されています。distutils
今のところCythonコードを完全に無視していますが、2ステップのビルドを拡張機能に変換するにはどうすればよいですsetup.py
か?私が理解できた終値は次のようになります。
from numpy.distutils.core import setup, Extension
wrapper = Extension('my_wrapper', ['my_wrapper.f90', ])
setup(
libraries = [('my_module', dict(sources=['my_module.f90']],
extra_f90_compile_args=["-ffixed-form", ])))],
ext_modules = [wrapper, ]
)
ただし、これは機能しません。私のコンパイラはに多くの警告をスローしますmy_module.f90
が、それでもコンパイルされます(上記のコンパイラ呼び出しを使用しても警告はスローされません)。ただし、ラッパーをコンパイルしようとすると、my_module.mod
正常に作成されていても、は見つかりません。
何かご意見は?些細なことを見逃しているような気がしますが、ドキュメントはそれが何であるかを示すのに十分に具体化されていないようです。