numpy.distutils
)原文:https://docs.scipy.org/doc/numpy/reference/distutils.html
校对:(虚位以待)
NumPy提供增强的distutils功能,使其更容易构建和安装使用Fortran编译库的子包,自动生成代码和扩展模块。要使用NumPy distutils的功能,请使用numpy.distutils.core
的setup
命令。在numpy.distutils.misc_util
中还提供了一个有用的Configuration
类,它可以更容易地构造关键字参数以传递给安装函数(通过传递从todict()方法的类)。有关详细信息,请参阅<site-packages>/numpy/doc/DISTUTILS.txt
中的NumPy Distutils用户指南。
numpy.distutils
get_numpy_include_dirs () |
|
dict_append (d,\ * \ * kws) |
|
appendpath (prefix,path) |
|
allpath (name) |
使用操作系统的路径分隔符将/ -separated路径名转换为一个。 |
dot_join (\ * args) |
|
generate_config_py (target) |
生成包含在构建包期间使用的system_info信息的config.py文件。 |
get_cmd (cmdname [,_cache]) |
|
terminal_has_colors () |
|
red_text (s) |
|
green_text (s) |
|
yellow_text (s) |
|
blue_text (s) |
|
cyan_text (s) |
|
cyg2win32 (path) |
|
all_strings (lst) |
如果lst中的所有项目都是字符串对象,则返回True。 |
has_f_sources (来源) |
如果源包含Fortran文件,则返回True |
has_cxx_sources (sources) |
如果源包含C ++文件,则返回True |
filter_sources (sources) |
返回四个文件名列表,分别包含C,C ++,Fortran和Fortran 90模块源。 |
get_dependencies (sources) |
|
is_local_src_dir (目录) |
如果目录是本地目录,返回true。 |
get_ext_source_files (ext) |
|
get_script_files (scripts) |
numpy.distutils.misc_util.
Configuration
(package_name=None, parent_name=None, top_path=None, package_path=None, **attrs)[source]构造给定包名称的配置实例。如果parent_name不为None,则将包构建为parent_name包的子包。如果top_path和package_path为None,则假定它们等于创建此实例的文件的路径。numpy分布中的setup.py文件是如何使用Configuration
实例的好例子。
todict
()[source]返回与distutils setup函数的关键字参数兼容的字典。
例子
>>> setup(**config.todict())
get_distribution
()[source]返回distutils分布对象为self。
get_subpackage
(subpackage_name, subpackage_path=None, parent_name=None, caller_level=1)[source]返回子包配置列表。
参数: | subpackage_name:str或None
subpackage_path:str
parent_name:str
|
---|
add_subpackage
(subpackage_name, subpackage_path=None, standalone=False)[source]将子包添加到当前配置实例。
这在用于将子包添加到包的setup.py脚本中很有用。
参数: | subpackage_name:str
subpackage_path:str
standalone:bool |
---|
add_data_files
(*files)[source]将数据文件添加到配置data_files。
参数: | 文件:sequence
|
---|
笔记
文件序列的每个元素的形式是非常灵活的,允许从包中获取文件的何处以及它们最终将被安装在系统上的多种组合。最基本的用法是将files参数序列的一个元素作为一个简单的文件名。这将导致该文件从本地路径安装到self.name包的安装路径(包路径)。文件参数也可以是相对路径,在这种情况下,整个相对路径将安装到包目录中。最后,文件可以是绝对路径名,在这种情况下,文件将在绝对路径名中找到,但安装到包路径。
这种基本行为可以通过传递2元组作为文件参数来增强。元组的第一个元素应该指定应该在其中安装文件的剩余序列的相对路径(在软件包安装目录下)(它与源分发中的文件名无关)。元组的第二个元素是应该安装的文件序列。此序列中的文件可以是文件名,相对路径或绝对路径。对于绝对路径,文件将安装在顶层软件包安装目录中(不考虑第一个参数)。文件名和相对路径名将安装在软件包安装目录中作为元组的第一个元素提供的路径名下。
安装路径规则:
- file.txt - >(。,file.txt) - > parent / file.txt
- foo / file.txt - >(foo,foo / file.txt) - > parent / foo / file.txt
- /foo/bar/file.txt - >(。,/foo/bar/file.txt) - > parent / file.txt
- * .txt - > parent / a.txt,parent / b.txt
- foo / * .txt - > parent / foo / a.txt,parent / foo / b.txt
- / .txt - >(,* / .txt) - > parent / c / a.txt,parent / d / b.txt
- (sun,file.txt) - > parent / sun / file.txt
- (sun,bar / file.txt) - > parent / sun / file.txt
- (sun,/foo/bar/file.txt) - > parent / sun / file.txt
- (sun,* .txt) - > parent / sun / a.txt,parent / sun / b.txt
- (sun,bar / * .txt) - > parent / sun / a.txt,parent / sun / b.txt
- (sun / ,* / .txt) - > parent / sun / c / a.txt,parent / d / b.txt
另一个特性是,到数据文件的路径实际上可以是一个不带参数并返回到数据文件的实际路径的函数。这在构建包时生成数据文件时很有用。
例子
将文件添加到要包含在包中的data_files列表中。
>>> self.add_data_files('foo.dat',
... ('fun', ['gun.dat', 'nun/pun.dat', '/tmp/sun.dat']),
... 'bar/cat.dat',
... '/full/path/to/can.dat')
将安装这些数据文件到:
<package install directory>/
foo.dat
fun/
gun.dat
nun/
pun.dat
sun.dat
bar/
car.dat
can.dat
其中
add_data_dir
(data_path)[source]递归地将data_path下的文件添加到data_files列表。
递归地将data_path下的文件添加到要安装(和分发)的data_files列表中。data_path可以是相对路径名或绝对路径名,也可以是2元组,其中第一个参数显示安装目录中应安装数据目录的位置。
参数: | data_path:seq或str
|
---|
笔记
例子
例如假设源目录包含fun / foo.dat和fun / bar / car.dat:
>>> self.add_data_dir('fun')
>>> self.add_data_dir(('sun', 'fun'))
>>> self.add_data_dir(('gun', '/full/path/to/fun'))
将数据文件安装到以下位置:
<package install directory>/
fun/
foo.dat
bar/
car.dat
sun/
foo.dat
bar/
car.dat
gun/
foo.dat
car.dat
add_include_dirs
(*paths)[source]添加配置包含目录的路径。
将给定的路径序列添加到include_dirs列表的开头。此列表对当前软件包的所有扩展模块都可见。
add_headers
(*files)[source]为配置添加可安装的标头。
将给定的文件序列添加到标题列表的开头。By default, headers will be installed under
参数: | 文件:str或seq
|
---|
add_extension
(name, sources, **kw)[source]将扩展名添加到配置。
创建并将扩展实例添加到ext_modules列表。此方法还采用以下可选的关键字参数传递到Extension构造函数。
参数: | 名称:str
源:seq
include_dirs: define_macros: undef_macros: library_dirs: 库: runtime_library_dirs: extra_objects: extra_compile_args: extra_link_args: extra_f77_compile_args: extra_f90_compile_args: export_symbols: swig_opts: 取决于:
语言: f2py_options: module_dirs: extra_info:dict或list
|
---|
笔记
self.paths(...)方法应用于可能包含路径的所有列表。
add_library
(name, sources, **build_info)[source]将库添加到配置。
参数: | 名称:str
源:序列
build_info:dict,可选
|
---|
add_scripts
(*files)[source]将脚本添加到配置。
将文件序列添加到脚本列表的开头。脚本将安装在
add_installed_library
(name, sources, install_dir, build_info=None)[source]与add_library类似,但安装了指定的库。
与distutils
一起使用的大多数C库仅用于构建Python扩展,但是通过此方法构建的库将被安装,以便它们可以被第三方包重用。
参数: | 名称:str
源:序列
install_dir:str
build_info:dict,可选
|
---|---|
返回: | 没有 |
笔记
编译链接到指定C库所需的选项的最佳方法是使用“libname.ini”文件,并使用get_info
检索所需的选项(请参阅add_npy_pkg_config
add_npy_pkg_config
(template, install_dir, subst_dict=None)[source]从模板生成并安装npy-pkg配置文件。
从模板生成的配置文件安装在给定的安装目录中,使用subst_dict进行变量替换。
参数: | 模板:str
install_dir:str
subst_dict:dict,可选
|
---|
笔记
这适用于标准安装和就地构建,即@prefix@
指的是原位构建的源目录。
例子
config.add_npy_pkg_config('foo.ini.in', 'lib', {'foo': bar})
假设foo.ini.in文件具有以下内容:
[meta]
Name=@foo@
Version=1.0
Description=dummy description
[default]
Cflags=-I@prefix@/include
Libs=
生成的文件将具有以下内容:
[meta]
Name=bar
Version=1.0
Description=dummy description
[default]
Cflags=-Iprefix_dir/include
Libs=
并将作为foo.ini安装在'lib'子路径中。
paths
(*paths, **kws)[source]将glob应用于路径,如果需要,在前面添加local_path。
将glob.glob(...)应用于序列中的每个路径(如果需要),如果需要,预先置入local_path。因为在所有源列表上调用,所以允许在扩展模块和库和脚本的源列表中指定通配符,并允许路径名相对于源目录。
get_config_cmd
()[source]返回numpy.distutils config命令实例。
get_build_temp_dir
()[source]返回到临时文件应放置的临时目录的路径。
have_f77c
()[source]检查Fortran 77编译器的可用性。
在源生成函数中使用它,以确保设置分发实例已初始化。
笔记
如果Fortran 77编译器可用(因为一个简单的Fortran 77代码能够成功编译),则为true。
have_f90c
()[source]检查Fortran 90编译器的可用性。
在源生成函数中使用它,以确保设置分发实例已初始化。
笔记
如果Fortran 90编译器可用(因为一个简单的Fortran 90代码能够成功编译)
get_version
(version_file=None, version_variable=None)[source]尝试获取包的版本字符串。
返回当前软件包的版本字符串或无法检测版本信息。
笔记
此方法扫描名为__version__.py,
make_svn_version_py
(delete=True)[source]将数据函数附加到data_files列表,将生成__svn_version__.py文件到当前包目录。
从SVN版本号生成包__svn_version__.py文件,它将在python退出后删除,但将在执行sdist,etc命令时可用。
笔记
如果之前存在__svn_version__.py,则不会执行任何操作。
这用于处理SVN存储库中的源目录。
make_config_py
(name='__config__')[source]生成包含在构建包期间使用的包含system_info信息的包__config__.py文件。
此文件安装到软件包安装目录。
get_info
(*names)[source]获取资源信息。
返回单个字典中参数列表中所有名称的信息(从system_info.get_info)。
system_info.get_info (name [,notfound_action]) |
notfound_action: |
system_info.get_standard_file (fname) |
返回名为“fname”的文件的列表 |
cpuinfo.cpu |
|
log.set_verbosity (v [,force]) |
|
exec_command |
exec_command |
不安装常规C库(通过add_library安装),并且仅在构建期间使用(它们是静态链接的)。可安装的C库是一个纯C库,它不依赖于python C运行时,并且安装成可以被第三方包使用。要构建和安装C库,您只需使用方法add_installed_library而不是add_library,除了额外的install_dir
参数:
>>> config.add_installed_library('foo', sources=['foo.c'], install_dir='lib')
要使必要的构建选项可用于第三方,您可以使用numpy.distutils
中实现的npy-pkg-config机制。此机制基于包含所有选项的.ini文件。.ini文件与pkg-config unix实用程序使用的.pc文件非常相似:
[meta]
Name: foo
Version: 1.0
Description: foo library
[variables]
prefix = /home/user/local
libdir = ${prefix}/lib
includedir = ${prefix}/include
[default]
cflags = -I${includedir}
libs = -L${libdir} -lfoo
通常,该文件需要在构建期间生成,因为它需要在构建时仅知道一些信息(例如前缀)。如果使用配置方法add_npy_pkg_config,则这是自动的。假设我们有一个模板文件foo.ini.in如下:
[meta]
Name: foo
Version: @version@
Description: foo library
[variables]
prefix = @prefix@
libdir = ${prefix}/lib
includedir = ${prefix}/include
[default]
cflags = -I${includedir}
libs = -L${libdir} -lfoo
和setup.py中的以下代码:
>>> config.add_installed_library('foo', sources=['foo.c'], install_dir='lib')
>>> subst = {'version': '1.0'}
>>> config.add_npy_pkg_config('foo.ini.in', 'lib', subst_dict=subst)
这会将文件foo.ini安装到目录package_dir / lib中,并且foo.ini文件将从foo.ini.in生成,其中每个@version@
将替换为subst_dict['version']
。字典有一个额外的前缀替换规则自动添加,其中包含安装前缀(因为这不容易从setup.py获得)。npy-pkg-config文件也可以使用从get_npy_pkg_dir函数返回的路径安装在与numpy相同的位置。
可以从numpy.distutils.misc_util
中的get_info函数轻松检索信息:
>>> info = get_info('npymath')
>>> config.add_extension('foo', sources=['foo.c'], extra_info=**info)
可以向get_info提供查找.ini文件的其他路径列表。
.src
filesNumPy distutils支持自动转换名为
此模板转换器将根据“<...>”中的规则复制文件中名称包含“<...>”的所有函数和子例程 '<...>'中逗号分隔的字的数量确定块被重复的次数。 这些字是什么表示什么重复规则,'<...>',应该在每个块中替换。 块中的所有重复规则必须包含相同数量的逗号分隔的字,指示块应该重复的次数。如果重复规则中的单词需要逗号,左边或右边,那么在它前面加上一个反斜杠“”。如果重复规则中的单词与'\
当同一组重复必须在块中使用多次时,命名重复规则很有用。It is specified using
A short repeat rule looks like
以下预定义的命名重复规则可用:
非Fortran文件使用单独的语法定义模板块,应使用类似于Fortran特定重复的命名重复规则的变量扩展重复。这些文件的模板规则是: