最近工作需要,用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可以随处引用它

python的setup.py文件的更多相关文章

  1. python的setup.py文件及其常用命令

    编写setup.py文件,获取帮助:python setup.py --help-commands [python]  Standard commands:    build             ...

  2. python 利用 setup.py 手动安装django_chartit

    手动安装django_chartit库 1 下载压缩包 2 解压到python安装目录下,文件夹名为django_chartit,并检查文件夹下是否有setup.py文件 3 在cmd中进入djang ...

  3. 如何使用setup.py文件

    setup.py文件的使用:% python setup.py build #编译% python setup.py install    #安装% python setup.py sdist     ...

  4. 『Python』setup.py简介

    setup.py应用场合 网上见到其他人这样介绍: 假如我在本机开发一个程序,需要用到python的redis.mysql模块以及自己编写的redis_run.py模块.我怎么实现在服务器上去发布该系 ...

  5. python如何编译py文件生成pyc、pyo、pyd以及如何和C语言结合使用

    python执行py文件的流程 当我们执行一个py文件的时候,直接python xx.py即可,那么这个流程是怎么样的呢.先说明一下,python执行代码实际上是先打开文件然后执行里面的代码,所以文件 ...

  6. python中__init__.py文件的作用

    问题 在执行models.py时,报ImportError:No module named transwarp.db的错误,但明明transwarp下就有db.py文件,路径也没有错误.真是想不通.后 ...

  7. Python中__init__.py文件的作用详解

    转自http://www.jb51.net/article/92863.htm Python中__init__.py文件的作用详解 http://www.jb51.net/article/86580. ...

  8. python进阶之py文件内置属性

    前言 对于任何一个python文件来说,当python解释器运行一个py文件,会自动将一些内容加载到内置的属性中:一个模块我们可以看做是一个比类更大的对象. 查看模块的内置属性 我们先创建一个典型的p ...

  9. python 利用 setup.py 手动安装第三方类库

    python 利用 setup.py 手动安装第三方类库 由于我在mac使用时,装了python3,默认有python2的环境,使用 pip 安装第三方类库时,老是安装到 python2的环境上: 在 ...

随机推荐

  1. ps 和 pstree的用法

    ps 查看某个具体的命令进程: ps -C cmd-name: 如: ps -C httpd // 如果有多个名字相同的进程, 如httpd... 应该是它下面的子进程, 这时会显示第一个进程id. ...

  2. 阶段3 1.Mybatis_03.自定义Mybatis框架_6.自定义Mybatis的编码-实现基于XML的查询所有操作

    接下来就可以写创建代理对象的方法了 类加载器,代理谁,就用谁的加载器,因为这里用daoInterfaceClass.getClassLoader() 第二个代理谁就要和谁有相同的接口,daoInter ...

  3. 数据科学家人才危机现象,是FOMO还是Silver?

    数据科学家人才危机现象,是FOMO还是Silver? 数据科学家的人才短缺和薪水高涨已经达到了顶板,未来还会持续下去吗? 在过去几年中,高级分析(#大数据#分析)空间一直经历着严重的FOMO(害怕错过 ...

  4. 一文学会Go - 2 数据结构与算法实践篇

    练习:使用go语言实现冒泡排序和归并排序 冒泡排序是所有排序算法中最简单的,练习时先实现它: func bubbleSort(array []int) { n := len(array) ; j &l ...

  5. spring(一) IOC 控制反转 、DI 依赖注入

    IOC 控制反转:创建对象的方式  变成了由Spring来主导 IOC底层原理:对象工厂 1.导入jar包:4个核心jar和1个依赖jar spring-beans-4.3.9.RELEASE.jar ...

  6. vue路由高级用法

    五.路由设置高级用法alias 别名 {path:'/list',component:MyList,alias:'/lists'}redirect 重定向 {path:'/productList',r ...

  7. idea的掌握

    1:idea的界面了解(一般都会勾选这两项,编码比较方便) 2: 如何配置sdk(jdk,最后一个生成的是.class文件的位置) 3: 如何单个项目配置和全局配置 4:如何配置项目的jdk编译版本和 ...

  8. 精读《What's new in javascript》

    1. 引言 本周精读的内容是:Google I/O 19. 2019 年 Google I/O 介绍了一些激动人心的 JS 新特性,这些特性有些已经被主流浏览器实现,并支持 polyfill,有些还在 ...

  9. vue分别打包测试环境和正式环境

    vue打包时使用不同的环境变量 需求 同一个项目通过打包使用不同的环境变量,目前的环境有三个: 一.本地------开发环境 二.线上------测试环境 三.线上------正式环境 我们都知道vu ...

  10. JAVA基础--JAVA 集合框架(泛型、file类)

    一.集合总结 集合:Collection体系.Map体系. Collection体系:单列集合的共性操作规则. List:列表,可以重复,有下标,拥有特有的迭代器ListIterator. Array ...