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)