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 continue语句用法实例
Mar 11 Python
Python全局变量操作详解
Apr 14 Python
python使用psutil模块获取系统状态
Aug 27 Python
python opencv将图片转为灰度图的方法示例
Jul 31 Python
python读取word 中指定位置的表格及表格数据
Oct 23 Python
Python hashlib常见摘要算法详解
Jan 13 Python
python 中不同包 类 方法 之间的调用详解
Mar 09 Python
使用OpenCV获取图像某点的颜色值,并设置某点的颜色
Jun 02 Python
Python matplotlib读取excel数据并用for循环画多个子图subplot操作
Jul 14 Python
通过案例解析python鸭子类型相关原理
Oct 10 Python
Pytorch 统计模型参数量的操作 param.numel()
May 13 Python
python数字类型和占位符详情
Mar 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
PHP计划任务之关闭浏览器后仍然继续执行的函数
2010/07/22 PHP
php _autoload自动加载类与机制分析
2012/02/10 PHP
php处理文件的小例子(解压缩,删除目录)
2013/02/03 PHP
PHP 读取Postgresql中的数组
2013/04/14 PHP
解析php时间戳与日期的转换
2013/06/06 PHP
将酷狗krc歌词解析并转换为lrc歌词php源码
2014/06/20 PHP
CI框架学习笔记(二) -入口文件index.php
2014/10/27 PHP
php实现Linux服务器木马排查及加固功能
2014/12/29 PHP
php读取flash文件高宽帧数背景颜色的方法
2015/01/06 PHP
浅析Yii2集成富文本编辑器redactor实例教程
2016/04/25 PHP
简单的JS多重继承示例
2008/03/13 Javascript
用JavaScript页面不刷新时全选择,全删除(GridView)
2009/04/14 Javascript
28个JS验证函数收集
2010/03/02 Javascript
JQuery浮动DIV提示信息并自动隐藏的代码
2010/08/29 Javascript
jQuery控制图片的hover效果(smartRollover.js)
2012/03/18 Javascript
jQuery Tools Dateinput使用介绍
2012/07/14 Javascript
javascript中验证大写字母、数字和中文
2014/01/15 Javascript
浅谈JavaScript中定义变量时有无var声明的区别
2014/08/18 Javascript
被遗忘的javascript的slice() 方法
2015/04/20 Javascript
jQuery选择器用法实例详解
2015/12/17 Javascript
JavaScript 数组的进化与性能分析
2017/09/18 Javascript
浅谈vue中慎用style的scoped属性
2017/11/28 Javascript
Vue 页面切换效果之 BubbleTransition(推荐)
2018/04/08 Javascript
jQuery pagination分页示例详解
2018/10/23 jQuery
浅谈vue中$event理解和框架中在包含默认值外传参
2020/08/07 Javascript
浅谈Python基础—判断和循环
2019/03/22 Python
python连接、操作mongodb数据库的方法实例详解
2019/09/11 Python
Python命令行参数解析工具 docopt 安装和应用过程详解
2019/09/26 Python
Python模块的制作方法实例分析
2019/12/21 Python
Python如何存储数据到json文件
2020/03/09 Python
基于Python爬取素材网站音频文件
2020/10/21 Python
华为旗下电子商务平台:华为商城
2016/08/06 全球购物
给女儿的表扬信
2014/01/18 职场文书
安全承诺书格式
2014/05/21 职场文书
2016年“5.12”护士节慰问信
2015/11/30 职场文书
避坑之 JavaScript 中的toFixed()和正则表达式
2022/04/19 Javascript