资讯专栏INFORMATION COLUMN

在 Mac 下使用 Cython

huangjinnan / 2121人阅读

摘要:摘要在下使用会碰到一些意外。本文就此简单举了一个例子来说明在中使用的正确姿势。运行之接下来,我们来运行这个函数,当然是使用的方法。结束至此步骤全部完成本文只是给出了一些在上使用可能碰到的一些问题的解决方法。

摘要:在 Mac 下使用 Cython 会碰到一些意外。例如链接命令不一样什么的。本文就此简单举了一个例子来说明在 Mac OS X 中使用 Cython 的正确姿势。

安装 Cython

首先,我们需要安装 Cython。Cython 是一个 Python 的扩展组件,可以将符合 Cython 语法的 Python 代码翻译成 C 语言代码。如同在其他所有系统中安装 Python 扩展组件一样,只需要一行命令即可。

pip install cython

当然,前提是我们需要有 pip。不过对于玩 Python 的各位,想必 pip 是必不可少了啦,如果没有的话……谷歌之后,马上回来~~

编写 Cython 程序

有了 Cython 之后,让我们来编写一个简单的 a+b 函数好了。

# file: a_plus_b.pyx
def a_plus_b(int a, int b):
    cdef int c
    c = a + b
    return c

其中参数部分需要按照 C 语言的规范进行声明(似乎按照 Python 的规则直接写也是可以的),代码中的声明需要添加 cdef

运行之

接下来,我们来运行这个函数,当然是使用 Cython 的方法。

pyx 转换为 C

cython a_plus_b.pyx

此时会有 a_plus_b.c 生成。这个文件就是经过 Cython 翻译的代码。

编译 C 代码为链接库 so

此处代码请看完下面解释之后再执行,否则会出错 (:з」∠)

cc -c -fPIC -I/usr/local/include/python2.7 a_plus_b.c
cc -shared -lpython2.7 aa.o -o a_plus_b.so

其中第一行代码中需要指定一个 include 文件 Python.h 的位置。这里我们采用的是路径 /usr/local/include/python2.7,这是我们自己设置的软链接。默认情况下,Mac OS X 中 Python.h 文件的位置在一个类似于如下路径的地方。

/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/System/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7/

为了后续使用方便,我们建立一个软连接。

ln -s /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/System/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7/ /usr/local/include/python2.7

这样,我们第一行的命令就可以正确执行啦~~执行之后会生成 a_plus_b.o 文件。

第二行中需要指定链接的 Python 版本,即 -lpython2.7 参数。执行之后会生成 a_plus_b.so 文件。

从 Python 中调用刚编译的库

此时,a_plus_b.so 中的函数已经可以直接被 import

#!/usr/bin/env python
# -*- encoding: utf-8 -*-
import a_plus_b
print a_plus_b.a_plus_b(1, 2)

执行这段代码,会输出 3。

结束

至此步骤全部完成~~

本文只是给出了一些在 Mac OS X 上使用 Cython 可能碰到的一些问题的解决方法。至于如何在 Cython 中使用 Python 库以及如何调用 C 语言库,详见 Cython 三分钟入门。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/44173.html

相关文章

  • Cython 3.0 中文文档校对活动 | ApacheCN

    摘要:整体进度贡献指南项目仓库贡献指南请您勇敢地去翻译和改进翻译。然后回复,注明章节号一定要留。二校对需要校对语法术语使用文档格式如果觉得现有翻译不好,重新翻译也是可以的。三提交项目将译文放在文件夹下请见入门指南。 整体进度:https://github.com/apachecn/c... 贡献指南:https://github.com/apachecn/c... 项目仓库:https://...

    iamyoung001 评论0 收藏0
  • cython之always_allow_keywords

    摘要:最近有个同事编译一个脚本后,脚本里面调用函数的地方出现了问题。这个报错的意思是,这个不支持参数,但是是支持这种特性的。特地去差了下文档,确实如此在这里只要开启选项,就可以解决问题。 TypeError 最近有个同事编译一个脚本后,脚本里面调用函数的地方出现了问题。用一个简短的例子说明下:py文件 a.py 内容如下: def fn(a): print a fn(a=4) ...

    wind5o 评论0 收藏0
  • 4 个快速的 Python 编译器 for 2018

    摘要:但是由于程序并没有那么快,开发人员多年来创建了几个的编译器,包括和。在下面的细分中,所有的编译器都针对进行基准测试。编译器是系列的一部分,旨在作为的现代替代品。不仅仅是的编译器,它是的超集,支持与的互操作性。 简评:Python 和其他的解释型语言一样经常被吐槽性能不行,所以开发人员为了提升性能创建了不少编译器,本文则选取其中的四个做了基准测试。 Python 其实是一种相当快的语言,...

    YancyYe 评论0 收藏0
  • Python 代码混淆和加密技术

    动机 Python进行商业开发时, 需要有一定的安全意识, 为了不被轻易的逆向. 混淆和加密就有所必要了.混淆 为了增加代码阅读的难度, 源代码的混淆非常必要, 一个在线的Python代码混淆网站. http://pyob.oxyry.com/同时需要注意的是, 这个混淆其实还是被很多人怀疑的, 因为即使混淆了, 也没有改变代码的结构. 这种方法只能防君子,不防小人所以, 必要的话, 在编程的时候...

    didikee 评论0 收藏0
  • 全网首份Python打包工具Pyinstaller实战指南,如丝滑般体验

    摘要:最好是客户双击,完事儿。目前已经兼容,以及和。一共会有个对象,分别是。,就是我们的工作目录,存放我们的数据。编译打包最后,我们执行就好了。打包的可执行文件会在里,中是一些打包时候需要的文件。输出中最后有字样,就算成功了。 showImg(https://img-blog.csdnimg.cn/20190303211533768.png?x-oss-process=image/water...

    caikeal 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<