F2PY用户指南和参考手册 > 使用F2PY
F2PY既可以用作命令行工具,也可以用作f2py
Python模块numpy.f2py
。虽然我们尝试将命令行工具作为numpy安装程序的一部分进行安装,但某些平台(例如Windows)很难将可执行文件可靠地放置在上PATH
。我们将f2py
在本文档中引用,但您可能必须将其作为模块运行
`
python -m numpy.f2py
`
如果您f2py
不带任何参数运行,并且末尾的行与从中打印的NumPy版本匹配,则可以使用较短的版本。如果不是,或者您无法运行,则应使用更长的版本替换所有对此处的调用。numpy Version
python -m numpy.f2py
f2py
f2py
f2py
¶当用作命令行工具时,f2py
具有三种主要模式,通过-c
和-h
开关的使用来区分:
要扫描Fortran源并生成签名文件,请使用
f2py -h <filename.pyf> <options> <fortran files> \
[[ only: <fortran functions> : ] \
[ skip: <fortran functions> : ]]... \
[<fortran files> ...]
请注意,Fortran源文件可以包含许多例程,不一定需要从Python使用所有例程。因此,您可以指定应该包装哪些例程(
部分)或应忽略哪些例程F2PY(部分)。only: .. :
skip: .. :
如果将if <filename.pyf>
指定为,stdout
那么签名将发送到标准输出而不是文件。
在其他选项(请参见下文)中,以下选项可以在此模式下使用:
--overwrite-signature
覆盖现有签名文件。
要构建扩展模块,请使用
f2py <options> <fortran files> \
[[ only: <fortran functions> : ] \
[ skip: <fortran functions> : ]]... \
[<fortran files> ...]
构造的扩展模块将保存
<modulename>module.c
到当前目录。
这里也可能包含签名文件。在其他选项(请参见下文)中,以下选项可以在此模式下使用:<fortran files>
--debug-capi
将调试钩子添加到扩展模块。使用此扩展模块时,有关包装器的各种信息将打印到标准输出中,例如变量的值,采取的步骤等。
-include'<includefile>'
将CPP #include
语句添加到扩展模块源。
<includefile>
应该以下列形式之一给出:
"filename.ext"
<filename.ext>
include语句仅在包装函数之前插入。此功能允许<includefile>
在F2PY生成的包装器中使用任意C函数(在中定义)。
不建议使用此选项。使用usercode
语句直接在签名文件中指定C代码片段
--[no-]wrap-functions
为Fortran函数创建Fortran子例程包装。
--wrap-functions
默认设置是因为它确保最大的可移植性和编译器独立性。
--include-paths <path1>:<path2>:..
从给定目录搜索包含文件。
--help-link [<list of resources names>]
列出由找到的系统资源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和C源,最后将所有对象和库文件链接到扩展模块,并保存到当前目录中。<fortran files>
<modulename>.so
如果不包含签名文件,则通过扫描所有Fortran源代码以获取常规签名来构建扩展模块。<fortran files>
在其他选项(请参阅下文)和先前模式中描述的选项中,以下选项可以在此模式下使用:
--help-fcompiler
列出可用的Fortran编译器。
--help-compiler
[已贬值]列出可用的Fortran编译器。
--fcompiler=<Vendor>
按供应商指定Fortran编译器类型。
--f77exec=<path>
指定F77编译器的路径
--fcompiler-exec=<path>
[已贬值]指定F77编译器的路径
--f90exec=<path>
指定F90编译器的路径
--f90compiler-exec=<path>
[已贬值]指定F90编译器的路径
--f77flags=<string>
指定F77编译器标志
--f90flags=<string>
指定F90编译器标志
--opt=<string>
指定优化标志
--arch=<string>
指定特定于架构的优化标志
--noopt
无需优化即可编译
--noarch
无需依赖于拱的优化即可进行编译
--debug
编译调试信息
-l<libname>
<libname>
链接时使用库。
-D<macro>[=<defn=1>]
将宏定义<macro>
为<defn>
。
-U<macro>
定义宏 <macro>
-I<dir>
将目录追加<dir>
到搜索包含文件的目录列表中。
-L<dir>
将目录添加<dir>
到要搜索的目录列表中-l
。
link-<resource>
用<resource>链接扩展模块,由<resource>定义
numpy_distutils/system_info.py
。例如,要链接到优化的LAPACK库(在MacOSX上为vecLib,在其他地方为ATLAS),请使用--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 <modulename>
扩展模块的名称。默认值为untitled
。如果使用了签名文件(* .pyf),请不要使用此选项。
--[no-]lower
不要降低中的大小写。默认情况下,
假定带开关,
不带开关。<fortran files>
--lower
-h
--no-lower
-h
--build-dir <dirname>
所有F2PY生成的文件都在中创建<dirname>
。默认值为
tempfile.mkdtemp()
。
--quiet
安静地跑
--verbose
格外冗长。
-v
打印f2py版本ID并退出。
f2py
不带任何选项执行即可获取可用选项的最新列表。
numpy.f2py
¶警告
该f2py
模块的当前Python接口尚未成熟,将来可能会更改。
Fortran到Python接口生成器。
numpy.f2py.
run_main
(comline_list )[源代码] ¶相当于跑步:
f2py <args>
在,但在Python中。除非使用此函数,否则
此函数将返回一个字典,其中包含有关生成的模块及其对源文件的依赖关系的信息。例如,可以从Python执行以下命令<args>=string.join(<list>,' ')
-h
f2py -m scalar scalar.f
您不能使用此功能构建扩展模块,即,-c
不允许使用。使用compile
命令代替
例子
>>>导入numpy.f2py >>> r = numpy.f2py.run_main(['-m','scalar','doc / source / f2py / scalar.f']) 读取fortran代码... 读取文件“ doc / source / f2py / scalar.f”(格式:修复程序,严格) 后期处理... 块:标量 座:FOO 构建模块... 构建模块“标量” ... 将C / API模块“标量”写入文件“ ./scalarmodule.c” >>>打印(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.f2py.
compile
(source,modulename ='untitled',extra_args ='',verbose = True,source_fn = None,extension ='。f' )[源代码] ¶使用f2py从Fortran 77源字符串构建扩展模块。
Fortran的要编译模块/子例程的源代码
在1.16.0版中更改:接受str和字节
编译后的python模块的名称
附加参数传递给f2py
在1.16.0版中进行了更改:可能还会提供args列表。
将f2py输出打印到屏幕
写入fortran源的文件名。默认设置是使用具有extension参数提供的扩展名的临时文件
如果未提供source_fn,则文件扩展名。该扩展告知使用哪种fortran标准。默认值为f,表示F77标准。
1.11.0版中的新功能。
成功0
例子
>>> 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!