Distutils发布C++扩展的Python模块

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


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值