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 (2)
Oct 31 Python
Python3 处理JSON的实例详解
Oct 29 Python
Python实现矩阵转置的方法分析
Nov 24 Python
解决Tensorflow使用pip安装后没有model目录的问题
Jun 13 Python
Python统计python文件中代码,注释及空白对应的行数示例【测试可用】
Jul 25 Python
python之消除前缀重命名的方法
Oct 21 Python
python微信好友数据分析详解
Nov 19 Python
pandas使用apply多列生成一列数据的实例
Nov 28 Python
pyqt 实现在Widgets中显示图片和文字的方法
Jun 13 Python
django 快速启动数据库客户端程序的方法示例
Aug 16 Python
利用keras加载训练好的.H5文件,并实现预测图片
Jan 24 Python
QML实现钟表效果
Jun 02 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英文单词统计器
2016/06/23 PHP
PHP数组实际占用内存大小原理解析
2020/12/11 PHP
Prototype使用指南之base.js
2007/01/10 Javascript
JavaScript监测ActiveX控件是否已经安装过的代码
2008/09/02 Javascript
利用jquery包将字符串生成二维码图片
2013/09/12 Javascript
javascript客户端遍历控件与获取父容器对象示例代码
2014/01/06 Javascript
jquery提交form表单简单示例分享
2014/03/03 Javascript
淘宝网提供的国内NPM镜像简介和使用方法
2014/04/17 Javascript
node.js中的fs.mkdirSync方法使用说明
2014/12/17 Javascript
jQuery中:eq()选择器用法实例
2014/12/29 Javascript
javascript实现简单的进度条
2015/07/02 Javascript
jQuery中$.ajax()和$.getJson()同步处理详解
2015/08/12 Javascript
谈一谈bootstrap响应式布局
2016/05/23 Javascript
页面get请求 中文参数方法乱码问题的快速解决方法
2016/05/31 Javascript
JS类的定义与使用方法深入探索
2016/11/26 Javascript
JavaScript之class继承_动力节点Java学院整理
2017/07/03 Javascript
利用jsonp与代理服务器方案解决跨域问题
2017/09/14 Javascript
Vue2.5 结合 Element UI 之 Table 和 Pagination 组件实现分页功能
2018/01/26 Javascript
JavaScript字符串转数字的5种方法及遇到的坑
2018/07/16 Javascript
Vue 实现前进刷新后退不刷新的效果
2019/06/14 Javascript
关于element的表单组件整理笔记
2021/02/05 Javascript
Vue实现圆环进度条的示例
2021/02/06 Vue.js
[58:58]2018DOTA2亚洲邀请赛 4.4 淘汰赛 TNC vs VG 第二场
2018/04/05 DOTA
详解Python中的Descriptor描述符类
2016/06/14 Python
python中常用的九种预处理方法分享
2016/09/11 Python
新手常见6种的python报错及解决方法
2018/03/09 Python
PyQt4实现下拉菜单可供选择并打印出来
2018/04/20 Python
Python3爬虫之自动查询天气并实现语音播报
2019/02/21 Python
20行python代码的入门级小游戏的详解
2019/05/05 Python
我就是这样学习Python中的列表
2019/06/02 Python
HTML5 Blob 实现文件下载功能的示例代码
2019/11/29 HTML / CSS
葡萄牙航空官方网站:TAP Air Portugal
2019/10/31 全球购物
财务管理专业应届毕业生求职信
2013/09/22 职场文书
结婚邀请函范文
2014/01/14 职场文书
环保倡议书500字
2014/05/15 职场文书
导游词创作书写原则以及开场白技巧怎么学?
2019/09/25 职场文书