Python 扩展模块Cython安装及使用

​ Cython是一种通过python语法编写C扩展的编程语言,源代码可被翻译成优化的C/C++代码并编译成Python扩展模块。 Cython使得Python语言的C扩展与Python一样简单。本文主要介绍Python 扩展模块Cython安装及使用。

1、Cython安装

​ Python官方就提供了Python/C API可以实现Python和C语言混合编程,但编写复杂,入门门槛较高。Cython的出现为解决此问题。Cython的编译环境需要有C编译器,安装Cython可以直接通过pip。

编译器安装:

1)RedHat

yum install gcc
yum install gcc-c++ libstdc++-devel

2)Ubuntu

sudo apt-get install gcc
sudo apt-get install g++
pip install cython

3)Windows

参考文档:Windows上MinGW安装配置教程

安装Cython:

pip install Cython

相关文档:https://cython.readthedocs.io/en/latest/src/quickstart/install.html

2、Cython的使用

1)创建simple.pyx文件

文件扩展名为.pyx,内容如下:

print("url=https://www.cjavapy.com")

2)创建setup.py来编译

setup.py文件内容如下:

from setuptools import setup
from Cython.Build import cythonize
setup(
ext_modules = cythonize("simple.pyx")
)

3)终端执行命令

python .\setup.py build_ext --inplace

相关文档:https://cython.readthedocs.io/en/latest/src/quickstart/build.html

执行后目录下应该出现2个文件:simple.c,simple.cp38-win_amd64.pyd,和一个文件夹:build

注意:Linux系统下编译不会得到.pyd文件,而是会得到.so文件。

import simple

执行import simple会输出:

url=https://www.cjavapy.com

3、Cython完整示例

1)demo.pyx

import cython
import numpy as np
cimport numpy as np

cdef extern from "demolibrary.h":
    void _scale "scale" (float*, int, float)

np.import_array()

@cython.boundscheck(False)
@cython.wraparound(False)
def scale(np.ndarray x, float mult):
    _scale(<float*> np.PyArray_DATA(x), x.size, mult)
    return x

def foo(float x):
    cdef float y
    y = 2 * x
    return y

2)编译

python setup.py build_ext --inplace

3)调用

import pyldpc_generate
H = pyldpc_generate.generate(512,1024,3.0,2,123)

源码地址:https://github.com/fasiha/cython-demo

推荐阅读
cjavapy编程之路首页