免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3011 | 回复: 1

Cython参考指南 – 编译 [复制链接]

论坛徽章:
0
发表于 2009-11-19 15:11 |显示全部楼层
译文地址:http://chenxiaoyu.org/blog/archives/60

Cython代码跟Python不一样,必须要编译。

编译经过两个阶段:

* Cython编译.pyx文件为.c文件

* C编译器会把.c文件编译成.so文件(Windows上是.pyd)

以下会分节介绍几种方式来建立你的扩展模块。

注意: -a 选项,如果使用该选项将会为.c文件生成一份很漂亮的HTML文件,双击高亮的章节部分会展开代码,这对理解,优化和调试模块将会非常有帮助。

命令行

从命令行执行Cython编译器,输入选项和.pyx文件列表。

$ cython -a yourmod.pyx

会生成一个yourmod.c文件(指定-a选项会生成一个HTML文件)

编译.c文件取决于你的操作系统,请参考下如何在你的系统写Python扩展模块文档。

下面是一个Linux系统的例子:

$ gcc -shared -pthread -fPIC -fwrapv -O2 -Wall -fno-strict-aliasing \
-I/usr/include/python2.5 -o yourmod.so yourmod.c

gcc需要提供包含的文件和扩展库的链接。

在目录里会生成yourmod.so文件。

现在只需要导入你的yourmod模块就可以了。

Distutils

确保你的系统已经安装好Distutils。

下面假设需要编译的文件叫hello.pyx。

建立一个setup.py的脚本:

from distutils.core import setup
from distutils.extension import Extension
from Cython.Distutils import build_ext

ext_modules = [Extension("hello", ["hello.pyx"])]

setup(
    name = ’Hello world app’,
    cmdclass = {’build_ext’: build_ext},
    ext_modules = ext_modules
)

在命令行执行:python setup.py build_ext –inplace

现在可以在shell或者脚本里正常导入使用了。

Pyximport

在纯Python代码里调用Cython代码:

>>> import pyximport; pyximport.install()
>>> import helloworld
Hello World

这仅仅是简单调用Cython,不需要C库也不需要构建脚本。

当然也可以实验性的在Python调用。允许在Python模块中运行Cython代码在任何一个.pyx和.py模块。这包
括标准库和包。如果Cython编译失败的话,pyximport会返回到加载失败的模块处。

.py安装是这样:

>>> pyximport.install(pyimport = True)

原文:http://docs.cython.org/src/reference/compilation.html

[ 本帖最后由 smallfish_xy 于 2009-11-19 15:12 编辑 ]

论坛徽章:
0
发表于 2009-11-19 15:32 |显示全部楼层
拜LZ

目前正咕咚这玩意儿
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

SACC2019中国系统架构师大会

【数字转型 架构演进】SACC2019中国系统架构师大会
2019年10月31日~11月2日第11届中国系统架构师大会(SACC2019)将在北京隆重召开。四大主线并行的演讲模式,1个主会场、20个技术专场、超千人参与的会议规模,100+来自互联网、金融、制造业、电商等领域的嘉宾阵容,将为广大参会者提供一场最具价值的技术交流盛会。




----------------------------------------

大会官网>>
  

北京盛拓优讯信息技术有限公司. 版权所有 16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122
中国互联网协会会员  联系我们:huangweiwei@it168.com
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP