Using F2PY¶
F2PY可以用作命令行工具f2py
或作为Python模块f2py2e
。
Command f2py
¶
用作命令行工具时,f2py
有三种主要模式,通过使用-c
和-h
开关区分:
要扫描Fortran源并生成签名文件,请使用
f2py -h <filename.pyf> <options> <fortran files> \ [[ only: <fortran functions> : ] \ [ skip: <fortran functions> : ]]... \ [<fortran files> ...]
注意,Fortran源文件可以包含许多例程,不一定所有的例程都需要从Python中使用。所以,你可以指定哪些例程应该包装(
: ... :
例程F2PY应忽略(在skip: ... :
part)。如果
<filename.pyf>
被指定为stdout
,那么签名会发送到标准输出,而不是文件。在其他选项(见下文)中,以下选项可用于此模式:
--overwrite-signature
覆盖现有签名文件。
要构建扩展模块,请使用
f2py <options> <fortran files> \ [[ only: <fortran functions> : ] \ [ skip: <fortran functions> : ]]... \ [<fortran files> ...]
构造的扩展模块保存为
<modulename>module.c
到当前目录。这里
&lt; fortran 文件&gt;
也可能包含签名文件。在其他选项(见下文)中,以下选项可用于此模式:--debug-capi
向扩展模块添加调试挂钩。当使用此扩展模块时,关于包装器的各种信息被打印到标准输出,例如变量的值,所采取的步骤等。
-include'<includefile>'
将CPP
#include
语句添加到扩展模块源。<includefile>
应以下列其中一种形式提供:"filename.ext" <filename.ext>
include语句在包装函数之前插入。此功能允许在F2PY生成的包装器中使用任意C函数(在
<includefile>
中定义)。此选项已弃用。使用
usercode
语句直接在签名文件中指定C代码段
--[no-]wrap-functions
创建Fortran子程序包装器到Fortran函数。
--wrap-functions
是默认值,因为它确保最大的可移植性和编译器独立性。- include-paths &lt; path1&gt;:&lt; path2&gt;:..
从给定目录搜索包含文件。
- help-link [&lt; list of t> resources names&gt; t5>
列出
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> ]
If
<fortran files>
contains a signature file, then a source for an extension module is constructed, all Fortran and C sources are compiled, and finally all object and library files are linked to the extension module<modulename>.so
which is saved into the current directory.If
<fortran files>
does not contain a signature file, then an extension module is constructed by scanning all Fortran source codes for routine signatures.除了其他选项(参见下文)和上一模式中描述的选项,以下选项可用于此模式:
--help-fcompiler
列出可用的Fortran编译器。
--help-compiler
[depreciated]列出可用的Fortran编译器。
--fcompiler=<Vendor>
按供应商指定Fortran编译器类型。
--f77exec=<path>
指定F77编译器的路径
--fcompiler-exec=<path>
[depreciated]指定F77编译器的路径
--f90exec=<path>
指定F90编译器的路径
--f90compiler-exec=<path>
[depreciated]指定F90编译器的路径
--f77flags=<string>
指定F77编译器标志
--f90flags=<string>
指定F90编译器标志
--opt=<string>
指定优化标志
--arch=<string>
指定架构特定的优化标志
--noopt
无优化编译
--noarch
无需依赖于arch的优化编译
--debug
编译调试信息
-l<libname>
链接时使用库
<libname>
。-D<macro>[=<defn=1>]
将宏
<macro>
定义为<defn>
。-U<macro>
定义宏
<macro>
-I<dir>
将目录
<dir>
附加到搜索的包含文件的目录列表。-L<dir>
将目录
<dir>
添加到要搜索的目录列表-l
link-<resource>
链接扩展模块
由 例如。与优化的LAPACK库(MacOSX上的vecLib,其他地方的ATLAS)链接,请使用numpy_distutils/system_info.py
定义。--link-lapack_opt
。另请参阅--help-link
开关。当构建扩展模块时,非gcc Fortran编译器可能需要以下宏的组合:
-DPREPEND_FORTRAN -DNO_APPEND_FORTRAN -DUPPERCASE_FORTRAN
要测试F2PY生成的接口的性能,使用
-DF2PY_REPORT_ATEXIT
。然后在Python的出口打印出各种时间的报告。此功能可能无法在所有平台上工作,目前仅支持Linux平台。要查看F2PY生成的接口是否执行数组参数的副本,请使用
-DF2PY_REPORT_ON_ARRAY_COPY=<int>
。当数组参数的大小大于<int>
时,有关应答的消息发送到stderr
。
其他选项:
-m &lt;模块名称&gt;
- 扩展模块的名称。默认值为
untitled
。如果使用签名文件(* .pyf),请不要使用此选项。 --[no-]lower
- 不要降低
&lt; fortran 文件&gt;
中的情况。By default,--lower
is assumed with-h
switch, and--no-lower
without the-h
switch. - build-dir &lt; dirname&gt;
- 所有F2PY生成的文件都在
<dirname>
中创建。默认值为tempfile.mkdtemp()
。 --quiet
- 静静地运行。
--verbose
- 以额外的冗长运行。
-v
- 打印f2py版本ID并退出。
在没有任何选项的情况下执行f2py
可获取最新的可用选项列表。
Python module f2py2e
¶
警告
当前与f2py2e
模块的Python接口不成熟,并且可能会根据用户的需求在将来更改。
以下功能由f2py2e
模块提供:
run_main(<list>)
相当于运行:
f2py <args>
其中
&lt; args&gt; = string.join(&lt; list&gt;,' ')
除非使用-h
,此函数返回一个字典,其中包含有关生成的模块及其对源文件的依赖性的信息。例如,可以执行命令f2py -m 标量 scalar.f
从Python如下>>> import f2py2e >>> r=f2py2e.run_main(['-m','scalar','docs/usersguide/scalar.f']) Reading fortran codes... Reading file 'docs/usersguide/scalar.f' 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/f2py2e/src/fortranobject.h'], 'csrc': ['./scalarmodule.c', '/home/users/pearu/src_cvs/f2py2e/src/fortranobject.c']}}
你不能用这个函数建立扩展模块,也就是说,不允许使用
-c
。使用compile
命令,参见下面。compile(source, modulename ='untitled', extra_args ='', verbose = 1, source_fn = None)
从Fortran 77源字符串
source
构建扩展模块。如果成功返回0。注意,这个函数实际上从shell调用f2py -c ...
,以确保当前Python进程的安全。例如,>>> import f2py2e >>> fsource = ''' ... subroutine foo ... print*, "Hello world!" ... end ... ''' >>> f2py2e.compile(fsource,modulename='hello',verbose=0) 0 >>> import hello >>> hello.foo() Hello world!