我继承一个Fortran 77码,它实现其通过程序块,其需要用户输入的显著量经由交互式命令提示每次程序运行时运行的若干子例程。 因为我想自动运行的代码,我把所有的子程序成一个模块并通过F2PY写了一个包装代码。 一切两步编译后正常工作:
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代码模块。
我的目标是包括这个代码封装较大的科学代码,它已经具备了使用setup.py
使用distutils
构建一个用Cython模块。 完全忽视了当下用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
,即使成功创建它。
有什么想法吗? 我有一种感觉,我失去了一些东西微不足道,但只是似乎并不充实了足够的文件,以表明它可能是什么。