如何执行`f2py`?

问题描述 投票:0回答:4

如何包装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

python fortran f2py
4个回答
0
投票

f2py不是Python命令,您无法在Python shell或.py源文件中执行它。这是一个可执行命令。您必须在系统的shell中执行它。

您仍然没有回答您拥有的操作系​​统,但如果是Windows,则必须在CMD.exe命令提示符或PowerShell中运行它。如果是Linux或类似的,请在bash或类似的shell中运行它。您必须在Fortran源文件所在的同一目录(文件夹)中运行它。


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扩展模块。

另外,有关如何使用f2py的详细qazxsw poi。

OP的问题可能还有其他一些问题,但目前最重要的是这个问题。像Fortran subrotuine不使用explanation等。


2
投票

好吧,我找到了答案。

看起来在这个版本的anaconda应该是这样的

implicit none

所以这种方式f2py.py部分代替了所有这些。可以肯定的是,这个模块将来会有更多的麻烦,但到目前为止,我的疑虑很明显。


1
投票

如果你想使用python代码将fortran转换为python对象,以下内容将起作用:

Python c:\user\anaconda3\scripts\f2py.py FIB1.f -m FIB2 -h FIB1.py

如果你没有 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的问题,我无法通过所有互联网帮助解决这个问题)。 还要确保将Windows路径环境配置为指向fortran编译器路径。

© www.soinside.com 2019 - 2024. All rights reserved.