NumPy 中文文档

version: 1.14.0

Built with Teadocs

构建可安装的C库

# 构建可安装的C库

传统的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')

# npy-pkg-config文件

要为第三方提供必要的构建选项,可以使用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
and the following code in 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相同的位置。

# 重用另一个包中的C库

可以从numpy.distutils.misc_util中的get_info函数轻松检索信息:

>>> info = get_info('npymath')
>>> config.add_extension('foo', sources=['foo.c'], extra_info=**info)

可以为get_info提供查找.ini文件的其他路径列表。