Distutils的API参阅https://docs.python.org/2/distutils/apiref.html
本地生产python模块,动态库
python2.7 setup.py build_ext --inplace
python2.7 setup.py build_ext --inplace
在相应python版本安装
pyana27 setup.py install (alias pyana27="/root/anaconda2/bin/python")
python3.6 setup.py install
扩展模块:
描述扩展模块由setup函数的关键字参数ext_modules实现。ext_modules是Extension实例的列表,每一个Extension实例描述了一个独立的扩展模块,扩展模块可以设置扩展包名,头文件、源文件、链接库及其路径、宏定义和编辑参数等,英文原文链接:
英文链接:https://docs.python.org/2/distutils/setupscript.html#describing-extension-modules
1.包名
name:指定扩展包名称
1.头文件
include_dirs: 指定头文件
Extension('foo', ['foo.c'], include_dirs=['include'])
Extension('foo', ['foo.c'], include_dirs=['/usr/include/X11'])
2.源文件
sources:指定源文件,可以是c、c++、Objective-C、*.i,文件
2.宏
define_macros
:定义宏
undef_macros
:取消宏定义
Extension(...,
define_macros=[('NDEBUG', '1'),
('HAVE_STRFTIME', None)],
undef_macros=['HAVE_FOO', 'HAVE_BAR'])
相当于每个c文件头部有:
#define NDEBUG 1
#define HAVE_STRFTIME
#undef HAVE_FOO
#undef HAVE_BAR
3.库
libraries:要链接的库的列表
library_dirs:链接时,搜索链接库的路径列表
runtime_library_dirs :运行时,搜索动态库的路径列表
Extension(..., library_dirs=['/usr/X11R6/lib'], libraries=['X11', 'Xt'])4.编译链接附加命令行选项
extra_link_args
extra_compile_args
Distutils可以进行扩展,比如增加新的命令、修改现有的命令。可参阅https://docs.python.org/2/distutils/extending.html
e.g.
---------------------------------------------------------------手动版本
swig -c++ -python recognition.i
g++ -std=c++11 -DHAVE_ATLAS -O2 -fPIC -I/usr/wxf/kaldi/src/ -I/usr/wxf/kaldi/tools/openfst/include -I/usr/wxf/kaldi/tools/ATLAS/include -c recognition.cc
g++ -std=c++11 -DHAVE_ATLAS -O2 -fPIC -c recognition_wrap.cxx -I/usr/wxf/kaldi/src/ -I/usr/wxf/kaldi/tools/openfst/include -I/usr/wxf/kaldi/tools/ATLAS/include -I/root/anaconda3/include/python3.6m\
g++ -std=c++11 -Wall -msse -msse2 -pthread -shared -DKALDI_DOUBLEPRECISION=0 -DHAVE_EXECINFO_H=1 -DHAVE_CXXABI_H -DHAVE_ATLAS -O2 -fPIC -L/root/anaconda3/lib -Wl,-rpath=/root/anaconda3/lib -lpython3.6m -Wl,-rpath=/usr/wxf/kaldi/tools/openfst/lib /usr/wxf/kaldi/tools/openfst/lib/libfst.so -Wl,-rpath=/usr/lib64/atlas /usr/lib64/atlas/libsatlas.so.3 -Wl,-rpath=/usr/wxf/kaldi/src/lib -L/usr/wxf/kaldi/src/lib -lkaldi-base -lkaldi-hmm -lkaldi-ivector -lkaldi-feat -lkaldi-transform -lkaldi-gmm -lkaldi-tree -lkaldi-util -lkaldi-matrix recognition.o recognition_wrap.o -o _recognition.so
---------------------------------------------------------------Distutils版本
#!/usr/bin/env python
"""
setup.py file for SWIG C\+\+/Python recognition
"""
from distutils.core import setup, Extension
recognition_module = Extension('_recognition',
sources=['recognition.i', 'recognition.cc'],
include_dirs=['/usr/wxf/kaldi/src/', '/usr/wxf/kaldi/tools/openfst/include', '/usr/wxf/kaldi/tools/ATLAS/include'],
swig_opts=['-c++'],
libraries=['fst', 'satlas','kaldi-base', 'kaldi-hmm', 'kaldi-ivector', 'kaldi-feat', 'kaldi-transform', 'kaldi-gmm', 'kaldi-tree', 'kaldi-util', 'kaldi-matrix'],
#libraries=['libfst.so','libsatlas.so.3','libkaldi-base.so','libkaldi-hmm.so','libkaldi-ivector.so','libkaldi-feat.so','libkaldi-transform.so','libkaldi-gmm.so','libkaldi-tree.so','libkaldi-util.so','libkaldi-matrix.so'],
library_dirs=['/usr/wxf/kaldi/tools/openfst/lib', '/usr/lib64/atlas', '/usr/wxf/kaldi/src/lib'],
runtime_library_dirs=['/usr/wxf/kaldi/tools/openfst/lib', '/usr/lib64/atlas', '/usr/wxf/kaldi/src/lib'],
extra_compile_args=['-std=c++11', '-DHAVE_ATLAS', '-O2', '-fPIC'],
extra_link_args=['-std=c++11', '-Wall', '-msse', '-msse2', '-pthread', '-shared', '-DKALDI_DOUBLEPRECISION=0', '-DHAVE_EXECINFO_H=1', '-DHAVE_CXXABI_H', '-DHAVE_ATLAS', '-O2', '-fPIC'],
#define_macros=[('DKALDI_DOUBLEPRECISION', '0'),('DHAVE_EXECINFO_H', '1'),('HAVE_STRFTIME', None)],
)
setup (name = 'recognition',
version = '0.1',
author = "wu xian feng",
description = """voice recognition""",
ext_modules = [recognition_module],
py_modules = ["recognition"],
)