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"],
)