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的Django框架中的项目进行单元测试的方法
Apr 11 Python
浅谈Python数据类型之间的转换
Jun 08 Python
Python3学习urllib的使用方法示例
Nov 29 Python
Python基于列表模拟堆栈和队列功能示例
Jan 05 Python
python3 破解 geetest(极验)的滑块验证码功能
Feb 24 Python
pandas中的DataFrame按指定顺序输出所有列的方法
Apr 10 Python
Python 编码规范(Google Python Style Guide)
May 05 Python
python pandas中对Series数据进行轴向连接的实例
Jun 08 Python
python pands实现execl转csv 并修改csv指定列的方法
Dec 12 Python
用Python绘制漫步图实例讲解
Feb 26 Python
opencv python 对指针仪表读数识别的两种方式
Jan 14 Python
python urllib和urllib3知识点总结
Feb 08 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
一个简单的php实现的MySQL数据浏览器
2007/03/11 PHP
PHP 中dirname(_file_)讲解
2007/03/18 PHP
深入php数据采集的详解
2013/06/02 PHP
PHP魔术方法之__call与__callStatic使用方法
2017/07/23 PHP
文字幻灯片
2006/06/26 Javascript
从sohu弄下来的flash中展示图片的代码
2007/04/27 Javascript
Iframe thickbox2.0使用的方法
2009/03/05 Javascript
ImageZoom 图片放大镜效果(多功能扩展篇)
2010/04/14 Javascript
jquery 快速回到页首的方法
2013/12/05 Javascript
手机端网页点击链接触发自动拨打或保存电话的示例代码
2014/08/15 Javascript
javascript实现在下拉列表中显示多级树形菜单的方法
2015/08/12 Javascript
jQuery实现默认是闭合的FAQ展开效果菜单
2015/09/14 Javascript
JS实现获取键盘按下的按键并显示在页面上的方法
2015/11/04 Javascript
javascript数字验证的实例代码(推荐)
2016/08/20 Javascript
JS实现简单的tab切换选项卡效果
2016/09/21 Javascript
JS实现的表头列头固定页面功能示例
2017/01/10 Javascript
Angular 4环境准备与Angular cli创建项目详解
2017/05/27 Javascript
JavaScript实现的搜索及高亮显示功能示例
2017/08/14 Javascript
vue-resource拦截器设置头信息的实例
2017/10/27 Javascript
微信小程序利用swiper+css实现购物车商品删除功能
2019/03/06 Javascript
es6数组的flat(),flatMap()函数用法实例分析
2020/04/18 Javascript
[01:23:59]2018DOTA2亚洲邀请赛 4.1 小组赛 B组 VP vs Secret
2018/04/03 DOTA
Python实现定时精度可调节的定时器
2018/04/15 Python
Python3爬楼梯算法示例
2019/03/04 Python
python修改字典键(key)的方法
2019/08/05 Python
python爬虫 urllib模块url编码处理详解
2019/08/20 Python
使用批处理脚本自动生成并上传NuGet包(操作方法)
2019/11/19 Python
Python抓新型冠状病毒肺炎疫情数据并绘制全国疫情分布的代码实例
2020/02/05 Python
塑料制成的可水洗的编织平底鞋和鞋子:Rothy’s
2018/09/16 全球购物
白俄罗斯大卖场:21vek.by
2019/07/25 全球购物
酒吧副总经理岗位职责
2013/12/10 职场文书
小学一年级学生评语
2014/04/22 职场文书
高中生评语大全
2014/04/25 职场文书
说好普通话圆梦你我他演讲稿
2014/09/21 职场文书
化工见习报告范文
2014/10/31 职场文书
蔬果开业典礼发言稿应该怎么写?
2019/09/03 职场文书