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 12 Python
闭包在python中的应用之translate和maketrans用法详解
Aug 27 Python
Python实现Sqlite将字段当做索引进行查询的方法
Jul 21 Python
Python可变参数用法实例分析
Apr 02 Python
Python实现通讯录功能
Feb 22 Python
在Python 中实现图片加框和加字的方法
Jan 26 Python
Python基于滑动平均思想实现缺失数据填充的方法
Feb 21 Python
python 根据网易云歌曲的ID 直接下载歌曲的实例
Aug 24 Python
python 插入日期数据到Oracle实例
Mar 02 Python
python相对企业语言优势在哪
Jun 12 Python
PyTorch中model.zero_grad()和optimizer.zero_grad()用法
Jun 24 Python
pycharm2020.1.2永久破解激活教程,实测有效
Oct 29 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代码实现支付宝批量付款
2015/12/24 PHP
PHP array_reduce()函数的应用解析
2018/10/28 PHP
JavaScript Cookie的读取和写入函数
2009/12/08 Javascript
jquery 学习之二 属性相关
2010/11/23 Javascript
原生js和jQuery随意改变div属性style的名称和值
2014/10/22 Javascript
jquery中push()的用法(数组添加元素)
2014/11/25 Javascript
JavaScript插件化开发教程 (一)
2015/01/27 Javascript
JS+CSS模拟可以无刷新显示内容的留言板实例
2015/03/03 Javascript
jQuery实现不断闪烁文字的方法
2015/05/15 Javascript
js实现延迟加载的方法
2015/06/24 Javascript
基于百度地图api清除指定覆盖物(Overlay)的方法
2018/01/26 Javascript
使用webpack打包koa2 框架app
2018/02/02 Javascript
vue系列之requireJs中引入vue-router的方法
2018/07/18 Javascript
jQuery中实现text()的方法
2019/04/04 jQuery
vue父子组件间引用之$parent、$children
2020/05/20 Javascript
[44:39]2014 DOTA2国际邀请赛中国区预选赛 NE VS CNB
2014/05/21 DOTA
go语言计算两个时间的时间差方法
2015/03/13 Python
Python进阶之尾递归的用法实例
2018/01/31 Python
python2.7到3.x迁移指南
2018/02/01 Python
Python实现简单http服务器
2018/04/12 Python
Numpy 将二维图像矩阵转换为一维向量的方法
2018/06/05 Python
python 格式化输出百分号的方法
2019/01/20 Python
docker django无法访问redis容器的解决方法
2019/08/21 Python
Python关于__name__属性的含义和作用详解
2020/02/19 Python
python名片管理系统开发
2020/06/18 Python
Python enumerate() 函数如何实现索引功能
2020/06/29 Python
python 删除excel表格重复行,数据预处理操作
2020/07/06 Python
Harman Audio官方商店:购买JBL、Harman Kardon、Infinity和AKG
2019/12/05 全球购物
Python是如何进行类型转换的
2013/06/09 面试题
中专生自荐信
2013/10/12 职场文书
成教自我鉴定
2013/10/27 职场文书
英语系毕业生自荐信
2013/10/31 职场文书
ktv中秋节活动方案
2014/01/30 职场文书
三十年同学聚会致辞
2015/07/28 职场文书
2016学习全国教书育人楷模先进事迹心得体会
2016/01/21 职场文书
光之国的四大叛徒:第一贝利亚导致宇宙毁灭,赛文奥特曼在榜
2022/03/18 日漫