如何包装f2py模块?
我的意思是,我正在阅读一些说我应该执行的教程
f2py FIB1.f -m FIB2 -h FIB1.pyf
但是,我不知道我必须执行该操作,肯定不会在spyder
或我做错了。
为什么吗
因为我执行此代码应该从Fortran中的子例程创建Fortran的扩展模块,但是会生成错误。
我的Fortran子程序:
SUBROUTINE FIB(A,N)
INTEGER N
REAL*8 A(N)
DO I=1,N
IF (I.EQ.1) THEN
A(I) = 0.0D0
ELSEIF (I.EQ.2) THEN
A(I) = 1.0D0
ELSE
A(I) = A(I-1) + A(I-2)
ENDIF
ENDDO
END
我在Python中执行的操作:
import numpy.f2py as f2py
f2py FIB1.f -m FIB2 -h FIB1.pyf
错误就是这个:
runfile('F:/SLB/Larryf2py/teste.py', wdir='F:/SLB/Larryf2py')
File "F:/SLB/Larryf2py/teste.py", line 9
f2py FIB1.f -m FIB2 -h FIB1.pyf
^
SyntaxError: invalid syntax
据我所知,不确定,它应该产生类似的东西:
# File setup.py
def configuration(parent_package='',top_path=None):
from numpy.distutils.misc_util import Configuration
config = Configuration('',parent_package,top_path)
config.add_extension('m',
sources = ['m.pyf','foo.c'])
return config
if __name__ == "__main__":
from numpy.distutils.core import setup
setup(**configuration(top_path='').todict())
这个生成的例子是C语言,但我认为它对Fortran也是如此。
我的想法是什么?我应该在Python的另一个地方运行第一个代码...
我尝试重现this。
答案 0 :(得分:2)
您是否在Python代码中添加了f2py
命令?如果是,那就不好了。
行f2py FIB1.f -m FIB2 -h FIB1.pyf
需要在命令行中,而不是在任何* .py脚本中。
<强> From F2PY Users Guide and Reference Manual 强> f2py是一个程序/编译器。目的是F2PY -Fortran到Python接口生成器 - 项目是提供Python和Fortran语言之间的连接。 F2PY是一个Python包(带有命令行工具 f2py 和一个模块f2py2e),有助于创建/构建可实现的Python C / API扩展模块。
另外,这里详细介绍explanation如何使用f2py。
OP的问题可能还有其他一些问题,但目前最重要的是这个问题。就像Fortran subrotuine没有使用implicit none
等
答案 1 :(得分:2)
我找到了答案。
在这个版本的anaconda中看起来就像是
Python c:\user\anaconda3\scripts\f2py.py FIB1.f -m FIB2 -h FIB1.py
所以这样f2py.py部分代替了所有这些。可以肯定的是,这个模块将来会有更多的麻烦,但到目前为止,我的疑虑很明显。
答案 2 :(得分:1)
如果你想使用python代码将fortran转换为python对象,以下内容将起作用:
from numpy import f2py
with open('path_to_fotran_code') as sourcefile:
sourcecode = sourcefile.read()
f2py.compile(sourcecode, modulename='test_module', verbose=1,
extra_args= '--verbose'
'--compiler=mingw32')
import test_module
如果您没有mingw32
,可以使用--compile=msvc
(我在尝试使用msvc
时遇到了问题,而这些问题在所有互联网帮助下都无法解决。)
还要确保将Windows路径环境配置为指向fortran编译器路径。
答案 3 :(得分:0)
f2py
不是Python命令,您无法在Python shell或.py
源文件中执行它。这是一个可执行命令。您必须在系统的shell中执行它。
您仍然没有回答您拥有的操作系统,但如果是Windows,则必须在CMD.exe
命令提示符或PowerShell中运行它。如果是Linux或类似的,请在bash
或类似的shell中运行它。您必须在Fortran源文件所在的同一目录(文件夹)中运行它。