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 15 Python
Python测试人员需要掌握的知识
Feb 08 Python
Python实现简单的文本相似度分析操作详解
Jun 16 Python
Python 实现「食行生鲜」签到领积分功能
Sep 26 Python
python使用循环打印所有三位数水仙花数的实例
Nov 13 Python
python直接获取API传递回来的参数方法
Dec 17 Python
python批量识别图片指定区域文字内容
Apr 30 Python
使用django实现一个代码发布系统
Jul 18 Python
Python学习笔记之字符串和字符串方法实例详解
Aug 22 Python
Python with关键字,上下文管理器,@contextmanager文件操作示例
Oct 17 Python
mac 上配置Pycharm连接远程服务器并实现使用远程服务器Python解释器的方法
Mar 19 Python
python变量的作用域是什么
May 26 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
PHPMailer 中文使用说明小结
2010/01/22 PHP
收集的二十一个实用便利的PHP函数代码
2010/04/22 PHP
php开发中的页面跳转方法总结
2015/04/26 PHP
php使用自带dom扩展进行元素匹配的原理解析
2020/05/29 PHP
JavaScript 创建对象和构造类实现代码
2009/07/30 Javascript
屏蔽Flash右键信息的js代码
2010/01/17 Javascript
js中parseFloat(参数1,参数2)定义和用法及注意事项
2013/01/27 Javascript
js中parseInt函数浅谈
2013/07/31 Javascript
js中function()使用方法
2013/12/24 Javascript
节点的插入之append()和appendTo()的用法介绍
2014/01/13 Javascript
纯css+js写的一个简单的tab标签页带样式
2014/01/28 Javascript
js 日期比较相关天数代码
2014/04/02 Javascript
浅谈JavaScript 框架分类
2014/11/10 Javascript
director.js实现前端路由使用实例
2015/02/03 Javascript
Bootstrap每天必学之按钮
2015/11/26 Javascript
jquery $.trim()去除字符串空格的实现方法【附图例】
2016/03/30 Javascript
用JS中split方法实现彩色文字背景效果实例
2016/08/24 Javascript
Javascript仿京东放大镜的效果
2017/03/01 Javascript
微信小程序 自定义消息提示框
2017/08/06 Javascript
Vue自定义表单内容检查rules实例
2020/10/30 Javascript
[01:11:11]Alliance vs RNG 2019国际邀请赛淘汰赛 败者组BO1 8.20.mp4
2020/07/19 DOTA
python 实现识别图片上的数字
2019/07/30 Python
python3实现的zip格式压缩文件夹操作示例
2019/08/17 Python
树莓派安装OpenCV3完整过程的实现
2019/10/10 Python
Python3 Tkinkter + SQLite实现登录和注册界面
2019/11/19 Python
使用Python爬虫库BeautifulSoup遍历文档树并对标签进行操作详解
2020/01/25 Python
Python3使用xlrd、xlwt处理Excel方法数据
2020/02/28 Python
Java Spring项目国际化(i18n)详细方法与实例
2020/03/20 Python
pycharm 2018 激活码及破解补丁激活方式
2020/09/21 Python
Shopee越南:东南亚与台湾电商平台
2019/02/03 全球购物
戴尔英国翻新电脑和电子产品:Dell UK Refurbished Computers
2019/07/30 全球购物
优质飞蝇钓和渔具:RiverBum
2020/05/10 全球购物
机械专业个人求职自荐信格式
2013/09/21 职场文书
2014年五四青年节演讲比赛方案
2014/04/22 职场文书
2015秋季运动会通讯稿
2015/07/18 职场文书
团队拓展训练感想
2015/08/07 职场文书