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中文问题解决方法(总结了多位前人经验,初学者必看)
Mar 13 Python
Python中的列表知识点汇总
Apr 14 Python
使用Python进行二进制文件读写的简单方法(推荐)
Sep 12 Python
Python FTP两个文件夹间的同步实例代码
May 25 Python
Python 中的range(),以及列表切片方法
Jul 02 Python
Python占用的内存优化教程
Jul 28 Python
python 爬虫百度地图的信息界面的实现方法
Oct 27 Python
python判断链表是否有环的实例代码
Jan 31 Python
Pycharm+Python工程,引用子模块的实现
Mar 09 Python
python转化excel数字日期为标准日期操作
Jul 14 Python
python实现简单的井字棋游戏(gui界面)
Jan 22 Python
微信小程序调用python模型
Apr 21 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
全国FM电台频率大全 - 14 江西省
2020/03/11 无线电
同一空间绑定多个域名而实现访问不同页面的PHP代码
2006/12/06 PHP
php文本转图片自动换行的方法
2013/03/13 PHP
destoon找回管理员密码的方法
2014/06/21 PHP
PHP中Closure类的使用方法及详解
2015/10/09 PHP
PHP时间处理类操作示例
2018/09/05 PHP
PHP多进程通信-消息队列使用
2019/03/08 PHP
js一组验证函数
2008/12/20 Javascript
javascript 鼠标悬浮图片显示原图 移出鼠标后原图消失(多图)
2009/12/28 Javascript
jquery 表格分页等操作实现代码(pagedown,pageup)
2010/04/11 Javascript
分页栏的web标准实现
2011/11/01 Javascript
JavaScript中number转换成string介绍
2014/12/31 Javascript
浅谈JavaScript中的分支结构
2016/07/01 Javascript
Node.js数据库操作之连接MySQL数据库(一)
2017/03/04 Javascript
javascript中this用法实例详解
2017/04/06 Javascript
微信小程序中button组件的边框设置的实例详解
2017/09/27 Javascript
微信小程序如何连接Java后台
2019/08/08 Javascript
vue实现手机端省市区区域选择
2019/09/27 Javascript
jquery实现垂直手风琴导航栏
2020/02/18 jQuery
有关vue 开发钉钉 H5 微应用 dd.ready() 不执行问题及快速解决方案
2020/05/09 Javascript
JS实现图片幻灯片效果代码实例
2020/05/21 Javascript
JS实现拖动模糊框特效
2020/08/25 Javascript
vue实现树状表格效果
2020/12/29 Vue.js
[59:42]Secret vs Alliacne 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
Python Deque 模块使用详解
2014/07/04 Python
python负载均衡的简单实现方法
2018/02/04 Python
PyTorch搭建一维线性回归模型(二)
2019/05/22 Python
亚洲颇具影响力的男性在线购物零售商:His
2019/11/24 全球购物
构造器Constructor是否可被override?
2013/08/06 面试题
个人创业事迹材料
2014/12/30 职场文书
2015年机械设备管理工作总结
2015/05/04 职场文书
卖车协议书范文
2016/03/23 职场文书
python 对图片进行简单的处理
2021/06/23 Python
一文搞懂Redis中String数据类型
2022/04/03 Redis
Python多线程实用方法以及共享变量资源竞争问题
2022/04/12 Python
Spring IOC容器Bean的作用域及生命周期实例
2022/05/30 Java/Android