我已经继承了一个Fortran 77代码,该代码实现了几个子程序,它们通过一个程序块运行,每次程序运行时都需要通过交互式命令提示符输入大量的用户输入。由于我想自动运行代码,因此我将所有子例程移动到模块中,并通过F2PY编写了包装代码。一切两步编译后工作正常:翻译F2PY编译步骤到setup.py
gfortran -c my_module.f90 -o my_module.o -ffixed-form
f2py -c my_module.o -m my_wrapper my_wrapper.f90
这最终创建三个文件:my_module.o
,my_wrapper.o
,my_module.mod
和my_wrapper.so
。 my_wrapper.so
是我导入Python以访问旧版Fortran代码的模块。
我的目标是将此代码添加到更大的科学代码包中,该代码已使用distutils
构建一个Cython模块,其中已有setup.py
。完全忽略了当前的Cython代码,我该如何将两步构建翻译成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
,即使它已成功创建。
有什么想法?我有一种感觉我错过了一些微不足道的东西,但是这些文档似乎并没有充分表明它可能是什么。
谢谢斯蒂芬,这似乎是伎俩。我早已迁移到'cmake',但我非常感谢帮助! – 2013-05-27 13:34:50