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常用算法学习基础教程
Apr 13 Python
python中关于for循环的碎碎念
Jun 30 Python
Tensorflow之Saver的用法详解
Apr 23 Python
用Python实现大文本文件切割的方法
Jan 12 Python
Python docx库用法示例分析
Feb 16 Python
Python 抓取微信公众号账号信息的方法
Jun 14 Python
Django 数据库同步操作技巧详解
Jul 19 Python
python解析yaml文件过程详解
Aug 30 Python
python mysql中in参数化说明
Jun 05 Python
python3.6.8 + pycharm + PyQt5 环境搭建的图文教程
Jun 11 Python
python向xls写入数据(包括合并,边框,对齐,列宽)
Feb 02 Python
Django框架之路由用法
Jun 10 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实现ping
2006/10/09 PHP
php+mysql数据库查询实例
2015/01/21 PHP
php取得字符串首字母的方法
2015/03/25 PHP
PHP编写RESTful接口的方法
2016/02/21 PHP
动态表单验证的操作方法和TP框架里面的ajax表单验证
2017/07/19 PHP
PHP代码重构方法漫谈
2018/04/17 PHP
node通过npm写一个cli命令行工具
2017/10/12 Javascript
angularjs实现柱状图动态加载的示例
2017/12/11 Javascript
Vue多种方法实现表头和首列固定的示例代码
2018/02/02 Javascript
JS实现简单的星期格式转换功能示例
2018/07/23 Javascript
解决Angular4项目部署到服务器上刷新404的问题
2018/08/31 Javascript
迅速了解一下ES10中Object.fromEntries的用法使用
2019/03/05 Javascript
vue elementui el-form rules动态验证的实例代码详解
2019/05/23 Javascript
javascript 构建模块化开发过程解析
2019/09/11 Javascript
基于javascript实现日历功能原理及代码实例
2020/05/07 Javascript
[02:27]《DAC最前线》之附加赛征程
2015/01/29 DOTA
[14:03]2017DOTA2亚洲邀请赛开幕式:12神兵演绎水墨中华
2017/04/01 DOTA
[51:10]VP vs VGJ.S 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
[36:20]完美世界DOTA2联赛PWL S3 access vs Rebirth 第一场 12.17
2020/12/18 DOTA
python中利用xml.dom模块解析xml的方法教程
2017/05/24 Python
python函数中return后的语句一定不会执行吗?
2017/07/06 Python
python 常用的基础函数
2018/07/10 Python
Python基础教程之异常详解
2019/01/10 Python
python修改FTP服务器上的文件名
2019/09/11 Python
Python CSV文件模块的使用案例分析
2019/12/21 Python
基于Python计算圆周率pi代码实例
2020/03/25 Python
django实现模板中的字符串文字和自动转义
2020/03/31 Python
用HTML5制作视频拼图的教程
2015/05/13 HTML / CSS
Java程序开发中如何应用线程
2016/03/03 面试题
物流司机岗位职责
2013/12/28 职场文书
学前教育学生自荐信范文
2013/12/31 职场文书
小学生美德少年事迹
2014/02/02 职场文书
婚假请假条怎么写
2014/04/10 职场文书
鉴史问廉观后感
2015/06/10 职场文书
使用Html+Css实现简易导航栏功能(导航栏遇到鼠标切换背景颜色)
2021/04/07 HTML / CSS
vue实现可以快进后退的跑马灯组件
2022/04/08 Vue.js