【Python】setup.py文件中Extension函数
Extension()
是 setuptools
模块中的一个函数,用于定义需要编译的C/C++扩展模块。它的参数用于指定扩展模块的名称、源文件及其他相关配置。以下是 Extension()
函数的常用参数及其含义:
from setuptools import setup, Extension
module = Extension(
name,
sources,
include_dirs=None,
define_macros=None,
undef_macros=None,
library_dirs=None,
libraries=None,
runtime_library_dirs=None,
extra_objects=None,
extra_compile_args=None,
extra_link_args=None,
export_symbols=None,
swig_opts=None,
depends=None,
language=None,
optional=None
)
参数详解
-
name:
- 含义: 指定扩展模块的名称(包含包的路径),例如
'mypackage.mymodule'
。 - 类型:
str
- 含义: 指定扩展模块的名称(包含包的路径),例如
-
sources:
- 含义: 一个字符串列表,列出需要编译的源文件路径。
- 类型:
list of str
-
include_dirs:
- 含义: 包含目录的列表,编译时会搜索这些目录以查找头文件。
- 类型:
list of str
-
define_macros:
- 含义: 定义宏,列表中的每一项是一个元组,形式为
(name, value)
或(name, None)
。 - 类型:
list of tuple
- 含义: 定义宏,列表中的每一项是一个元组,形式为
-
undef_macros:
- 含义: 取消定义的宏,列表中的每一项是宏名称的字符串。
- 类型:
list of str
-
library_dirs:
- 含义: 库目录的列表,链接时会搜索这些目录以查找库文件。
- 类型:
list of str
-
libraries:
- 含义: 链接时需要的库的列表,不包括
lib
前缀和文件扩展名(例如math
对应libmath.so
或math.lib
)。 - 类型:
list of str
- 含义: 链接时需要的库的列表,不包括
-
runtime_library_dirs:
- 含义: 运行时库目录的列表,程序运行时会搜索这些目录以查找库文件。
- 类型:
list of str
-
extra_objects:
- 含义: 链接时需要的额外文件的列表,这些文件通常是其他的目标文件(
.o
文件)。 - 类型:
list of str
- 含义: 链接时需要的额外文件的列表,这些文件通常是其他的目标文件(
-
extra_compile_args:
- 含义: 额外的编译参数,传递给编译器的参数列表。
- 类型:
list of str
-
extra_link_args:
- 含义: 额外的链接参数,传递给链接器的参数列表。
- 类型:
list of str
-
export_symbols:
- 含义: 导出符号的列表(仅适用于Windows)。
- 类型:
list of str
-
swig_opts:
- 含义: 使用SWIG时的选项列表。
- 类型:
list of str
-
depends:
- 含义: 扩展模块依赖的文件列表,构建时会检查这些文件的时间戳,以确定是否需要重新编译。
- 类型:
list of str
-
language:
- 含义: 指定源代码的编程语言(如
'c'
、'c++'
)。 - 类型:
str
- 含义: 指定源代码的编程语言(如
-
optional:
- 含义: 指定该扩展模块是否是可选的,如果是可选的,在构建失败时不会报错。
- 类型:
bool
示例
以下是一个使用 Extension()
函数的示例,定义了一个简单的C扩展模块:
from setuptools import setup, Extension
module = Extension(
name='mypackage.mymodule',
sources=['src/mymodule.c'],
include_dirs=['/usr/local/include', 'include'],
define_macros=[('DEBUG', '1')],
undef_macros=['NDEBUG'],
library_dirs=['/usr/local/lib', 'lib'],
libraries=['mylib'],
runtime_library_dirs=['/usr/local/lib'],
extra_objects=['src/extra.o'],
extra_compile_args=['-O2', '-Wall'],
extra_link_args=['-Wl,-rpath,/usr/local/lib'],
depends=['src/mymodule.h'],
language='c'
)
setup(
name='mypackage',
version='0.1',
ext_modules=[module]
)
在这个示例中:
name='mypackage.mymodule'
指定扩展模块的名称和包路径。sources=['src/mymodule.c']
指定要编译的源文件。- 其他参数配置了编译和链接时的各种选项,如包含目录、宏定义、库目录、额外的编译和链接参数等。
通过这种方式,可以灵活地配置和编译C/C++扩展模块,以满足项目的需求。