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可以随处引用它
python的setup.py文件的更多相关文章
- python的setup.py文件及其常用命令
编写setup.py文件,获取帮助:python setup.py --help-commands [python] Standard commands: build ...
- python 利用 setup.py 手动安装django_chartit
手动安装django_chartit库 1 下载压缩包 2 解压到python安装目录下,文件夹名为django_chartit,并检查文件夹下是否有setup.py文件 3 在cmd中进入djang ...
- 如何使用setup.py文件
setup.py文件的使用:% python setup.py build #编译% python setup.py install #安装% python setup.py sdist ...
- 『Python』setup.py简介
setup.py应用场合 网上见到其他人这样介绍: 假如我在本机开发一个程序,需要用到python的redis.mysql模块以及自己编写的redis_run.py模块.我怎么实现在服务器上去发布该系 ...
- python如何编译py文件生成pyc、pyo、pyd以及如何和C语言结合使用
python执行py文件的流程 当我们执行一个py文件的时候,直接python xx.py即可,那么这个流程是怎么样的呢.先说明一下,python执行代码实际上是先打开文件然后执行里面的代码,所以文件 ...
- python中__init__.py文件的作用
问题 在执行models.py时,报ImportError:No module named transwarp.db的错误,但明明transwarp下就有db.py文件,路径也没有错误.真是想不通.后 ...
- Python中__init__.py文件的作用详解
转自http://www.jb51.net/article/92863.htm Python中__init__.py文件的作用详解 http://www.jb51.net/article/86580. ...
- python进阶之py文件内置属性
前言 对于任何一个python文件来说,当python解释器运行一个py文件,会自动将一些内容加载到内置的属性中:一个模块我们可以看做是一个比类更大的对象. 查看模块的内置属性 我们先创建一个典型的p ...
- python 利用 setup.py 手动安装第三方类库
python 利用 setup.py 手动安装第三方类库 由于我在mac使用时,装了python3,默认有python2的环境,使用 pip 安装第三方类库时,老是安装到 python2的环境上: 在 ...
随机推荐
- VS2008重置默认环境
Microsoft Visual Studio 2008 -> Visual Studio Tools -> Visual Studio 2008命令提示 进入Common7\IDE,然后 ...
- UI-WPF_UI:WPF UI - DMSkin官方网站
ylbtech-UI-WPF_UI:WPF UI - DMSkin官方网站 1.返回顶部 1. QQ: 944095635 DMSkin.com 首页 论坛 定制 博客 联系 DMSkin 3. ...
- winform带你玩转rabbitMQ
http://www.cnblogs.com/dubing/p/4017613.html
- 使用Sklearn构建朴素贝叶斯分类器-新闻分类
# -*- coding: UTF-8 -*- import jieba import os import random from sklearn.naive_bayes import Multino ...
- face-api.js 前端人脸识别,人脸检测,登录认证
1.参考face-api.js https://github.com/justadudewhohacks/face-api.js#face-api.js-for-the-browser
- 【Linux命令】解压相关命令
xxx.tar.gz : tar xvzf xxx.tar.gz xxx.tar.bz2 : tar -vxjf xxx.tar.bz2
- [转帖]Intel Xeon路线图:7nm处理器要上DDR5、PCIe 5.0
Intel Xeon路线图:7nm处理器要上DDR5.PCIe 5.0 https://www.cnbeta.com/articles/tech/849631.htm 在月初的投资者会议上,Intel ...
- 《剑指offer》面试题26 复杂链表的复制 Java版
(定义一个新的数据结构,每个节点除了具有普通链表的next域外,还有一个额外的引用指向任意节点.我们要对由该特殊数据结构形成的链表进行复制.) 我的方法:也就是克隆一个这种特殊链表,很快想到先不考虑原 ...
- 搜索专题: HDU1312Red and Black
Red and Black Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) To ...
- 根据日志来源的不同生成不同的index索引
使用filebeat收集系统日志,不同应用的日志,然后把这些日志传输给Logstash,再然后交由elasticsearch处理,那么如何区分不同的日志来源呢? filebeat.yml配置文件中不启 ...