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解决Fedora解压zip时中文乱码的方法
Sep 18 Python
从CentOS安装完成到生成词云python的实例
Dec 01 Python
Python的多维空数组赋值方法
Apr 13 Python
python 实时得到cpu和内存的使用情况方法
Jun 11 Python
pytorch使用Variable实现线性回归
May 21 Python
PyQt5 实现给窗口设置背景图片的方法
Jun 13 Python
浅谈Python中的异常和JSON读写数据的实现
Feb 27 Python
Python处理mysql特殊字符的问题
Mar 02 Python
python读取当前目录下的CSV文件数据
Mar 11 Python
解决numpy矩阵相减出现的负值自动转正值的问题
Jun 03 Python
如何基于Python pygame实现动画跑马灯
Nov 18 Python
matlab xlabel位置的设置方式
May 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
老照片 - 几十年前的收音机与人
2021/03/02 无线电
PHP利用REFERER根居访问来地址进行页面跳转
2013/09/28 PHP
php中最简单的字符串匹配算法
2014/12/16 PHP
Ajax和PHP正则表达式验证表单及验证码
2016/09/24 PHP
js 页面刷新location.reload和location.replace的区别小结
2009/12/24 Javascript
JQuery优缺点分析说明
2010/06/09 Javascript
异步加载script的代码
2011/01/12 Javascript
js 关键词高亮(根据ID/tag高亮关键字)案例介绍
2013/01/21 Javascript
JS+CSS实现一个气泡提示框
2013/08/18 Javascript
Javascript中引用示例介绍
2014/02/21 Javascript
jQuery实现可以控制图片旋转角度效果(附demo源码下载)
2016/01/27 Javascript
javascript特殊文本输入框网页特效
2016/09/13 Javascript
详解javascript表单的Ajax提交插件的使用
2016/12/29 Javascript
JS复制对应id的内容到粘贴板(Ctrl+C效果)
2017/01/23 Javascript
javascript 实现文本使用省略号替代(超出固定高度的情况)
2017/02/21 Javascript
vue根据值给予不同class的实例
2018/09/29 Javascript
JavaScript检查数据中是否存在相同的元素(两种方法)
2018/10/07 Javascript
Vue实现点击按钮复制文本内容的例子
2019/11/09 Javascript
jQuery实现获取多选框的值示例
2020/02/07 jQuery
用js实现放大镜效果
2020/10/28 Javascript
[14:57]DOTA2 HEROS教学视频教你分分钟做大人-幽鬼
2014/06/13 DOTA
[18:32]DOTA2 HEROS教学视频教你分分钟做大人-谜团
2014/06/12 DOTA
Linux下将Python的Django项目部署到Apache服务器
2015/12/24 Python
对Python中for复合语句的使用示例讲解
2018/11/01 Python
对python:print打印时加u的含义详解
2018/12/15 Python
python读取dicom图像示例(SimpleITK和dicom包实现)
2020/01/16 Python
详解pytorch中squeeze()和unsqueeze()函数介绍
2020/09/03 Python
详解Python中Pyyaml模块的使用
2020/10/08 Python
Ubuntu20下的Django安装的方法步骤
2021/01/24 Python
作为网站管理者应当如何防范XSS
2014/08/16 面试题
无工作经验者个人求职信范文
2013/12/22 职场文书
计算机专业自荐信
2014/05/24 职场文书
国际贸易毕业生自荐书
2014/06/22 职场文书
开展读书活动总结
2014/06/30 职场文书
大班下学期幼儿评语
2014/12/30 职场文书
辅导员学期工作总结
2015/08/14 职场文书