zoukankan      html  css  js  c++  java
  • python的setup.py文件

    最近工作需要,用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/OqsC01LTOqlB5dGhvbsCp1bmhozwvc3Ryb25nPjxicj4KPHN0cm9uZz4zoaJsYW5ndWFnZTwvc3Ryb25nPjxicj4KPHN0cm9uZz7AqdW50+/R1MP7s8Y8L3N0cm9uZz48YnI+CjxwPjxzdHJvbmc+NKGiaW5jbHVkZV9kaXJzPC9zdHJvbmc+PC9wPgo8cD48c3Ryb25nPszhuanL0cv3Qy9DJiM0MzsmIzQzO823zsS8/rXExL/CvNfps8m1xMHQse2jqLHIyOejuiouaKOpPC9zdHJvbmc+PC9wPgo8cD48c3Ryb25nPjxpbWcgc3JjPQ=="" alt="">


    5、library_dirs

    提供搜索C/C++库文件的目录组成的列表(比如:*.a)



    6、libraries

    库名(不是文件名或路径)的组成的列表



    简单的setup.py文件:

    (1)

    运行setup.py,传递参数build_ext,选项—inplace

    python setup.py build_ext —inplace
    系统报告:
    running build_ext
    cythoning import_cython_c_math.pyx to import_cython_c_math.c
    building "import_cython_c_math' extension
    creating build
    creating build/temp.linux-x86_64-2.6
    gcc -pthread -fno-strict-aliasing -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -D_GNU_SOURCE -fPIC -fwrapv -DNDEBUG -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -D_GNU_SOURCE -fPIC -fwrapv -fPIC -I/usr/include/python2.6 -c import_cython_c_math.c -obuild/temp.linux-x86_64-2.6/import_cython_c_math.o
    gcc -pthread -shared build/temp.linux-x86_64-2.6/import_cython_c_math.o -L/usr/lib64 -lpython2.6 -o /home/linshaowei/cython_setup_test/import_cython_c_math.so
    此时:
    当前目录下自动创建了:
    build目录
    进入到build目录里,有一个目录: temp.linux-x86_64-2.6,该目录里面存放了import_cython_c_math.o文件,该文件是c代码编译之后的包含0,1指令的对象文件(即c语音编译之后的文件)
    import_cython_c_math.so,其次是生成供python直接引用的动态链接库,是一个链接文件
    此时就可以在python引用该库文件了。

    (2)
    运行setup.py,传递参数build(编译)
    python setup.py build
    系统报告:
    running build
    running build_ext
    cythoning import_cython_c_math.pyx to import_cython_c_math.c
    building 'import_cython_c_math' extension
    creating build
    creating build/temp.linux-x86_64-2.6
    gcc -pthread -fno-strict-aliasing -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -D_GNU_SOURCE -fPIC -fwrapv -DNDEBUG -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -D_GNU_SOURCE -fPIC -fwrapv -fPIC -I/usr/include/python2.6 -c import_cython_c_math.c -o build/temp.linux-x86_64-2.6/import_cython_c_math.o
    creating build/lib.linux-x86_64-2.6
    gcc -pthread -shared build/temp.linux-x86_64-2.6/import_cython_c_math.o -L/usr/lib64 -lpython2.6 -o build/lib.linux-x86_64-2.6/import_cython_c_math.so
    此时,
    当前目录下自动创建了:
    build目录
    进入到build目录,有两个目录:
    lib.linux-x86_64-2.6该目录里面存放:import_cython_c_math.so文件
    temp.linux-x86_64-2.6该目录里面存放:import_cython_c_math.o文件

    sudo python setup.py install(安装)
    running install
    running build
    running build_ext
    skipping 'import_cython_c_math.c' Cython extension (up-to-date)
    running install_lib
    copying build/lib.linux-x86_64-2.6/import_cython_c_math.so -> /usr/lib64/python2.6/site-packages
    running install_egg_info
    Writing /usr/lib64/python2.6/site-packages/cython_build_test-0.0.0-py2.6.egg-info
    install参数,将动态链接文件 build/lib.linux-x86_64-2.6/import_cython_c_math.so创建了软链接/usr/lib64/python2.6/site-packages
    再写入Writing /usr/lib64/python2.6/site-packages/cython_build_test-0.0.0-py2.6.egg-info python安装目录,生成了egg文件并存放到安装目录,就意味着python可以随处引用它

  • 相关阅读:
    Wedding(2-SAT)
    JSOI2010 满汉全席
    2-SAT问题
    Tarjan求桥
    遥远的国度
    NOIP2014 联合权值
    部落冲突
    仓鼠找sugar
    2018.09.09 DL24 Day2总结
    php一些易犯的错误
  • 原文地址:https://www.cnblogs.com/L-H-R-X-hehe/p/3817474.html
Copyright © 2011-2022 走看看