pyx文件 生成pyd 文件用于 cython调用的实现


Posted in Python onMarch 04, 2021

pyx文件是python的c扩展文件,代码要符合cython的规范,用什么编辑器写都行。我在eric4上写的,结果它默认用python解释器来进行解释,还提示有bug,“语法错误”。

上面的pyx文件还仅仅是源代码文件,要想被python调用、要想运行,仅仅写了源代码还是不够的。具体来说,还要转成.c或者.c++的文件,并且再进一步转成.pyd文件。

pyd文件才是可以直接使用的文件。为了达到上述目的,就要写一个setup.py脚本,如下:

#!/usr/bin/python
#python version: 2.7.3
#Filename: SetupTestOMP.py 
# Run as: 
# python setup.py build_ext --inplace 
 
import sys 
sys.path.insert(0, "..") 
 
from distutils.core import setup 
from distutils.extension import Extension 
from Cython.Build import cythonize 
from Cython.Distutils import build_ext
 
# ext_module = cythonize("TestOMP.pyx") 
ext_module = Extension(
   "TestOMP",
  ["TestOMP.pyx"],
  extra_compile_args=["/openmp"],
  extra_link_args=["/openmp"],
  )
 
setup(
 cmdclass = {'build_ext': build_ext},
 ext_modules = [ext_module], 
)

这个完全是一个python脚本,可以在python解释器下面运行。

在控制台下,运行如下命令‘python setup.py build_ext --inplace',就生成了TestOMP.pyd文件。

当然,同时还有一些杂七杂八的文件,如‘build'目录下面的‘lib'文件。

这都提示着,这是在windows vistual studio环境下。

在linux+gcc环境下,就要生成.so文件了,而且“/openmp”的选项就要写成“-fopenmp”

写TestOMP.py

文件上述两个步骤,相当于把某个python效率瓶颈模块(这之前需要用profile工具来定位)用效率更高的代码写成了python的c扩展形式,接下来,就是要在python代码中调用他们。TestOMP.py就是这个调用的脚本,如下:

from TestOMP import Test 
Test()

这个就很容易了,import并且调用。在控制台下,输入“python TestOMP.py”,运行。

补充:python无法导入Cython的.pyx文件?

解决方法:

在import相应包之前,添加:

import pyximport
pyximport.install()

如果上面安装完成后运行程序又出现

No module named pyximport

此时需要:

pip install Cython

即可~

以上为个人经验,希望能给大家一个参考,也希望大家多多支持三水点靠木。如有错误或未考虑完全的地方,望不吝赐教。

Python 相关文章推荐
Python中list初始化方法示例
Sep 18 Python
Python3中使用PyMongo的方法详解
Jul 28 Python
学习python的前途 python挣钱
Feb 27 Python
Pycharm新手教程(只需要看这篇就够了)
Jun 18 Python
PYQT5开启多个线程和窗口,多线程与多窗口的交互实例
Dec 13 Python
python从内存地址上加载python对象过程详解
Jan 08 Python
Python关于__name__属性的含义和作用详解
Feb 19 Python
Python图像处理库PIL的ImageDraw模块介绍详解
Feb 26 Python
Python如何操作office实现自动化及win32com.client的运用
Apr 01 Python
django 实现简单的插入视频
Apr 07 Python
使用Python判断一个文件是否被占用的方法教程
Dec 16 Python
Python数据分析入门之教你怎么搭建环境
May 13 Python
Python .py生成.pyd文件并打包.exe 的注意事项说明
Mar 04 #Python
python 中 .py文件 转 .pyd文件的操作
Mar 04 #Python
Python实现图片指定位置加图片水印(附Pyinstaller打包exe)
Mar 04 #Python
python 指定源路径来解决import问题的操作
Mar 04 #Python
python源文件的字符编码知识点详解
Mar 04 #Python
python3判断IP地址的方法
Mar 04 #Python
Python解析m3u8拼接下载mp4视频文件的示例代码
Mar 03 #Python
You might like
帅气的琦玉老师
2020/03/02 日漫
PHP字符串的编码问题的详细介绍
2013/04/27 PHP
浅析ThinkPHP中的pathinfo模式和URL重写
2014/01/06 PHP
Yii2框架制作RESTful风格的API快速入门教程
2016/11/08 PHP
2017年最好用的9个php开发工具推荐(超好用)
2017/10/23 PHP
PHP+Ajax实现的博客文章添加类别功能示例
2018/03/29 PHP
在TP5数据库中四个字段实现无限分类的示例
2019/10/18 PHP
解决jquery中美元符号命名冲突问题
2014/01/08 Javascript
JS实现的最简Table选项卡效果
2015/10/14 Javascript
jQuery对html元素的取值与赋值实例详解
2015/12/18 Javascript
Spring MVC中Ajax实现二级联动的简单实例
2016/07/06 Javascript
Bootstrap的Carousel配合dropload.js实现移动端滑动切换图片
2017/03/10 Javascript
使用vue.js编写蓝色拼图小游戏
2017/03/17 Javascript
基于JavaScript实现的快速排序算法分析
2017/04/14 Javascript
Angular 4依赖注入学习教程之Injectable装饰器(六)
2017/06/04 Javascript
详解用node.js实现简单的反向代理
2017/06/26 Javascript
JS设计模式之单例模式(一)
2017/09/29 Javascript
利用babel将es6语法转es5的简单示例
2017/12/01 Javascript
Python中捕捉详细异常信息的代码示例
2014/09/18 Python
浅析Git版本控制器使用
2017/12/10 Python
Python实现读取机器硬件信息的方法示例
2018/06/09 Python
Python 数值区间处理_对interval 库的快速入门详解
2018/11/16 Python
Python 控制终端输出文字的实例
2019/07/12 Python
详解Python修复遥感影像条带的两种方式
2020/02/23 Python
django 读取图片到页面实例
2020/03/27 Python
python求numpy中array按列非零元素的平均值案例
2020/06/08 Python
matplotlib设置颜色、标记、线条,让你的图像更加丰富(推荐)
2020/09/25 Python
会计专业自荐信
2013/12/02 职场文书
电子专业毕业生自我鉴定
2014/01/22 职场文书
颁奖典礼主持词
2014/03/25 职场文书
促销活动计划书
2014/05/02 职场文书
家长建议怎么写
2014/05/15 职场文书
小学感恩教育活动总结
2014/07/07 职场文书
个人师德师风自我剖析材料
2014/09/29 职场文书
工作骂脏话检讨书
2014/10/05 职场文书
优秀党员个人总结
2015/02/14 职场文书