最近工作需要,用Cython写了*.pyx扩展,并将其编译成C文件,最后转换为so扩展,供python引用
使用 distutils 编译,建立一个setup.py的脚本
from distutils.core import setup
from distutils.extension import Extension
from Cython.Distutils import build_ext
setup(
name = 'cython_build_test’,
cmdclass = {'build_ext':build_ext},
ext_modules = ext_modules
)
关于setup函数的一些参数:
1、name
site-package安装目录下的egg文件:/usr/lib64/python2.6/site-packages/cython_build_test-0.0.0-py2.6.egg-info,如果不指定,将会与UNKNOW命名:/usr/lib64/python2.6/site-packages/UNKNOWN-0.0.0-py2.6.egg-info
2、packages告诉Distutils需要处理那些包(包含__init__.py的文件夹)
3、package_dirs告诉Distutils哪些目录下的文件被映射到哪个源码包。一个例子:package_dir = {‘’:lib},表示“root package”中的模块都在lib目录4、ext_modules是一个包含Extension实例的列表,Extension的定义也有一些参数,定义如下
5、ext_package定义extension的相对路径
6、requires定义依赖哪些模块
7、provides定义可以为哪些模块提供依赖
8、scripts指定python源码文件,可以从命令行执行。在安装时指定—install-script
9、package_data通常包含与包实现相关的一些数据文件或类似于readme的文件。如果没有提供模板,会被添加到MANIFEST文件中。
10、data_files指定其他的一些文件(如配置文件)
关于ext_modules参数详细说明:
定义Extension实例列表,
1、name
扩展包的名字,供python导入impZ喎?http://www.Bkjia.com/kf/ware/vc/" target="_blank" class="keylink">vcnTKscq508M8L3N0cm9uZz48YnI+CjxzdHJvbmc+MqGic291cmNlPC9zdHJvbmc+PGJyPgo8c3Ryb25nPtS0zsS8/tfps8m1xMHQse2jrNS0zsS8/r/J0tTKx0OjrEMmIzQzOyYjNDM7tcjM2LaotcTXytS0zsS8/qOsu/LIzrrOxuTL+9PJYnVpbGRfZXh0w/zB7si3yM/OqsC01LTOqlB5dGhvbsCp1bmhozwvc3Ryb25nPjxicj4KPHN0cm9uZz4zoaJsYW5ndWFnZTwvc3R