在 Mac 下使用 Cython

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

安装 Cython

首先,咱们须要安装 Cython。Cython 是一个 Python 的扩展组件,能够将符合 Cython 语法的 Python 代码翻译成 C 语言代码。如同在其余全部系统中安装 Python 扩展组件同样,只须要一行命令便可。shell

pip install cython

固然,前提是咱们须要有 pip。不过对于玩 Python 的各位,想必 pip 是必不可少了啦,若是没有的话……谷歌以后,立刻回来~~app

编写 Cython 程序

有了 Cython 以后,让咱们来编写一个简单的 a+b 函数好了。python2.7

# 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 的方法。.net

  1. pyx 转换为 C翻译

    cython a_plus_b.pyx

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

  2. 编译 C 代码为连接库 soorm

    此处代码请看完下面解释以后再执行,不然会出错 (:з」∠)blog

    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 文件。

  3. 从 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 三分钟入门

相关文章
相关标签/搜索