前言

cython是专门用来写在Python里面import用的扩展库。实际上Cython的语法基本上跟Python一致,而Cython有专门的“编译器”先将 Cython代码转变成C,然后使用C编译器编译出最终的Python可调用的模块。
本人因在github中找到了一份用cython写的自定义库函数代码,但无法直接运用到我所创建的pycharm编辑的项目文件中,因此为了实现在pycharm中py文件的代码调用,写了这篇文章。

一、pyx,pyd文件是什么?

pyx文件

pyx 文件是由 Cython 编程语言 “编写” 而成的 Python 扩展模块源代码文件。.pyx 文件要想被python语言直接识别,必须先被编译成 .c 文件,再编译成 .pyd 或 .so 文件,才可作为模块 import直接导入使用。

pyd文件

pyd 文件是非 Python,由其它编程语言 “编写-编译” 生成的 Python 扩展模块。Python 要导入 .pyd 文件,实际上是在 .pyd 文件中封装了一个 module。在 python 中使用时,把它当成 module 来用就可以了,即:“import 路径名.modulename” 即可,路径名为 .pyd 文件所在的路径。
介绍更加详细和全面的可以参考https://blog.csdn.net/qq_35608277/article/details/88937904
———————————————

二、使用步骤

1.安装对应的python平台和pycharm

在这里我使用的是python3.8和pycharm2020社区版(对于一般的来说够了)

2.创建编写对应的pyx文件

pycharm也可以直接创建编写pyx文件,但是在编写语法上需要按照cython格式去编写
创建pyx文件直接新建,后缀名为pyx即可
在这里插入图片描述
编写对应的SegmentImage.pyx文件,按照cython格式来,这里只是举个例子
在这里插入图片描述

3.编写对应的setup.py文件

setup.py文件的主要目的就是对pyx文件进行编译,然后生成pyd文件,方便在py文件中直接调用
代码如下:
代码如下(示例):

from distutils.core import setup
from distutils.extension import Extension
from Cython.Distutils import build_ext
import numpy as np

filename = 'SegmentImage'
full_filename = 'SegmentImage.pyx'

ext_modules = [Extension(filename, [full_filename],
                         language='c++',
                         extra_compile_args=['-O3', '-march=native', '-ffast-math', '/openmp'],
                         extra_link_args=['/openmp'])]

setup(
    cmdclass={
        'build_ext': build_ext},
    ext_modules=ext_modules,
    include_dirs=[np.get_include()])

4.编译setup文件,生成pyd文件

编译setup文件时,不要直接运行setup.py,不然可能出现这样的错误‘no commands supplied’
这是因为python的run程序,相当于命令行里的python setup.py
所以若想要不报错,有两种方法
1、打开 pycharm的命令行模式,点pycharm 左下角的电脑方块图标,选中【Terminal】即可进入终端,输入命令: python setup.py install。
在这里插入图片描述
2、直接从cmd进入文件所在目录下输入令: python setup.py install
在这里插入图片描述
pyx成功编译后的界面如下
在这里插入图片描述
这样就完成了对pyx文件的成功编译,在py文件中直接调用对应的库文件就好

from SegmentImage import segmentImage 

三、总结

总结起来就是步骤如下:
第一步安装对应的python和pycharm;第二步编写对应的pyx文件;第三步编写对应的setup文件;第四步生成pyd文件;第五步直接调用
参考博客:https://blog.csdn.net/u011418530/article/details/79986070
https://blog.csdn.net/ditai7533/article/details/101966350;https://blog.csdn.net/qq_35608277/article/details/88937904

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐