f2py可以用作命令行工具 f2py 或者作为python模块 numpy.f2py . 虽然我们尝试将命令行工具作为numpy安装程序的一部分进行安装,但是一些平台(如Windows)使得在 PATH . 我们会提到 f2py 但您可能必须将其作为模块运行:
f2py
numpy.f2py
PATH
python -m numpy.f2py
如果你跑 f2py 没有参数,行 numpy Version 最后与从 python -m numpy.f2py ,然后可以使用较短的版本。如果没有,或者你不能跑步 f2py ,您应该替换所有对 f2py 这里有较长的版本。
numpy Version
当用作命令行工具时, f2py 有三种主要模式,区别于 -c 和 -h 开关:
-c
-h
要扫描Fortran源并生成签名文件,请使用
f2py -h <filename.pyf> <options> <fortran files> \ [[ only: <fortran functions> : ] \ [ skip: <fortran functions> : ]]... \ [<fortran files> ...]
注意,Fortran源文件可以包含许多例程,不一定所有的例程都需要从Python中使用。因此,您可以指定应该包装哪些例程(在 only: .. : 部分)或应忽略哪些例程f2py(in skip: .. : 部分)。
only: .. :
skip: .. :
如果 <filename.pyf> 指定为 stdout 然后签名被发送到标准输出而不是文件。
<filename.pyf>
stdout
在其他选项中(见下文),可以在此模式下使用以下选项:
--overwrite-signature
覆盖现有签名文件。
要构造扩展模块,请使用
f2py -m <modulename> <options> <fortran files> \ [[ only: <fortran functions> : ] \ [ skip: <fortran functions> : ]]... \ [<fortran files> ...]
构造的扩展模块另存为 <modulename>module.c 到当前目录。
<modulename>module.c
在这里 <fortran files> 也可以包含签名文件。在其他选项中(见下文),可以在此模式下使用以下选项:
<fortran files>
--debug-capi
向扩展模块添加调试挂钩。当使用这个扩展模块时,将有关包装器的各种信息打印到标准输出,例如变量值、所采取的步骤等。
-include'<includefile>'
添加CPP #include 扩展模块源的语句。 <includefile> 应以以下形式之一给出:
#include
<includefile>
"filename.ext" <filename.ext>
include语句插入包装函数之前。此功能允许使用任意C函数(在 <includefile> )在f2py生成的包装中。
注解
此选项已弃用。使用 usercode 语句直接在签名文件中指定C代码段。
usercode
--[no-]wrap-functions
创建Fortran子例程包装器到Fortran函数。 --wrap-functions 是默认的,因为它确保了最大的可移植性和编译器独立性。
--wrap-functions
--include-paths <path1>:<path2>:..
搜索包含给定目录中的文件。
--help-link [<list of resources names>]
列出找到的系统资源 numpy_distutils/system_info.py . 例如,尝试 f2py --help-link lapack_opt .
numpy_distutils/system_info.py
f2py --help-link lapack_opt
要构建扩展模块,请使用
f2py -c <options> <fortran files> \ [[ only: <fortran functions> : ] \ [ skip: <fortran functions> : ]]... \ [ <fortran/c source files> ] [ <.o, .a, .so files> ]
如果 <fortran files> 包含签名文件,然后构造扩展模块的源,编译所有Fortran和C源,最后将所有对象和库文件链接到扩展模块 <modulename>.so 保存到当前目录中。
<modulename>.so
如果 <fortran files> 不包含签名文件,则通过扫描所有Fortran源代码以获取例行签名来构造扩展模块。
在其他选项(见下文)和先前模式中描述的选项中,可以在此模式中使用以下选项:
--help-fcompiler
列出可用的Fortran编译器。
--help-compiler
--fcompiler=<Vendor>
按供应商指定Fortran编译器类型。
--f77exec=<path>
指定F77编译器的路径
--fcompiler-exec=<path>
--f90exec=<path>
指定F90编译器的路径
--f90compiler-exec=<path>
--f77flags=<string>
指定F77编译器标志
--f90flags=<string>
指定F90编译器标志
--opt=<string>
指定优化标志
--arch=<string>
指定特定于体系结构的优化标志
--noopt
编译而不优化
--noarch
编译时不使用依赖于架构的优化
--debug
用调试信息编译
-l<libname>
使用类库 <libname> 链接时。
<libname>
-D<macro>[=<defn=1>]
定义宏 <macro> 作为 <defn> .
<macro>
<defn>
-U<macro>
定义宏 <macro>
-I<dir>
追加目录 <dir> 搜索包含文件的目录列表。
<dir>
-L<dir>
添加目录 <dir> 到要搜索的目录列表 -l .
-l
link-<resource>
链接扩展模块,其定义为 numpy_distutils/system_info.py . 例如,要链接到优化的lapack库(macosx上的veclib,其他地方的atlas),请使用 --link-lapack_opt . 也见 --help-link 开关。
--link-lapack_opt
--help-link
这个 f2py -c 选项必须应用于现有 .pyf 文件(加上源/对象/库文件)或必须指定 -m <modulename> 选项(加上源/对象/库文件)。使用以下选项之一:
f2py -c
.pyf
-m <modulename>
f2py -c -m fib1 fib1.f
或
f2py -m fib1 fib1.f -h fib1.pyf f2py -c fib1.pyf fib1.f
有关详细信息,请参阅 `Building C and C++ Extensions`_ _有关详细信息,请参阅Python文档。
在构建扩展模块时,非GCC Fortran编译器可能需要以下宏的组合:
-DPREPEND_FORTRAN -DNO_APPEND_FORTRAN -DUPPERCASE_FORTRAN
要测试f2py生成的接口的性能,请使用 -DF2PY_REPORT_ATEXIT . 然后在python的出口打印出各种计时的报告。此功能可能不适用于所有平台,目前仅支持Linux平台。
-DF2PY_REPORT_ATEXIT
要查看f2py生成的接口是否执行数组参数的副本,请使用 -DF2PY_REPORT_ON_ARRAY_COPY=<int> . 当数组参数的大小大于 <int> ,将有关应对的消息发送到 stderr .
-DF2PY_REPORT_ON_ARRAY_COPY=<int>
<int>
stderr
其他选项:
扩展模块的名称。默认是 untitled . 如果签名文件( * 使用PYF)。
untitled
--[no-]lower
做 [not] 把箱子放低 <fortran files> . 默认情况下, --lower 假定为 -h 开关,以及 --no-lower 没有 -h 开关。
--lower
--no-lower
--build-dir <dirname>
所有f2py生成的文件都创建在 <dirname> tempfile.mkdtemp() .
<dirname>
tempfile.mkdtemp()
--quiet
安静地跑。
--verbose
跑得格外冗长。
-v
打印f2py版本ID并退出。
执行 f2py 没有任何选项来获取可用选项的最新列表。
警告
当前的python接口 f2py 模块不成熟,将来可能会改变。
Fortran到Python接口生成器。
numpy.f2py.
compile
使用f2py从Fortran 77源字符串构建扩展模块。
要编译的模块/子例程的Fortran源
在 1.16.0 版更改: 接受str和字节
编译后的python模块的名称
传递给f2py的其他参数
在 1.16.0 版更改: 还可以提供参数列表。
将f2py输出打印到屏幕
写入Fortran源的文件的名称。默认情况下,使用扩展名由 extension 参数
文件扩展名if source_fn 未提供。扩展说明使用了哪种Fortran标准。默认值为 f ,这意味着F77标准。
1.11.0 新版功能.
如果为True,则返回 subprocess.CompletedProcess 而不是只包含stdout的stdour进程。
subprocess.CompletedProcess
1.20.0 新版功能.
成功时为0,或 subprocess.CompletedProcess 如果 full_output=True
full_output=True
实例
>>> import numpy.f2py >>> fsource = ''' ... subroutine foo ... print*, "Hello world!" ... end ... ''' >>> numpy.f2py.compile(fsource, modulename='hello', verbose=0) 0 >>> import hello >>> hello.foo() Hello world!
run_main
相当于运行:
f2py <args>
在哪里? <args>=string.join(<list>,' ') 但在python中。除非 -h 此函数返回一个字典,其中包含有关生成的模块及其对源文件的依赖关系的信息。例如,命令 f2py -m scalar scalar.f 可以从python执行,如下所示
<args>=string.join(<list>,' ')
f2py -m scalar scalar.f
不能使用此函数生成扩展模块,即使用 -c 不允许。使用 compile 命令代替
>>> import numpy.f2py >>> r = numpy.f2py.run_main(['-m','scalar','doc/source/f2py/scalar.f']) Reading fortran codes... Reading file 'doc/source/f2py/scalar.f' (format:fix,strict) Post-processing... Block: scalar Block: FOO Building modules... Building module "scalar"... Wrote C/API module "scalar" to file "./scalarmodule.c" >>> print(r) {'scalar': {'h': ['/home/users/pearu/src_cvs/f2py/src/fortranobject.h'], 'csrc': ['./scalarmodule.c', '/home/users/pearu/src_cvs/f2py/src/fortranobject.c']}}
numpy.distutils