pyx文件 生成pyd 文件用于 cython调用的实现
作者:darren2015zdc 发布时间:2022-09-17 13:54:32
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
即可~
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。如有错误或未考虑完全的地方,望不吝赐教。
来源:https://blog.csdn.net/darren2015zdc/article/details/54574911


猜你喜欢
- 用dicompyler软件打开dicom图像,头文件如图所示:当然也可以直接读取:ds = dicom.read_file('H:\
- 本文实例讲述了django框架模型层功能、组成与用法。分享给大家供大家参考,具体如下:Django models是Django框架自定义的一
- 昨天遇到了一个奇怪的问题,在Python中需要传递dict参数,利用json.dumps将dict转为json格式用post方法发起请求:p
- asp之家注:本篇asp留言本教程可以说是我见过的最详细,写的最认真的,最适合初学者来学习asp的一篇教程。在此感谢作者hemooday。可
- SQL 标准使用 CREATE TABLE 语句创建数据表;MySQL 则实现了三种创建表的方法,支持自定义表结构或者通过复制已有的表结构来
- 前言备受期待的django 2.0已经发布了,最大的一个变化就是不再支持python2.x版本了,这也为我们还在保守使用的2.x的同学们敲响
- 你应该听说过,应用Python,可以让你处理一天的重复工作量,缩短到几分钟甚至更短。从此解放上班时间,研究更多更有效率的工作方法。进一步提升
- go-cqhttp安装一、 简介1、 介绍官方文档地址:https://docs.go-cqhttp.org/各种框架都只是机器人的各种实现
- bootstrap的button边框问题最近在线上学习bootstrap时,发现很多童鞋都会遇到很多坑,有些很容易掉进去就出不来了;boot
- 前言Jenkins, DevOps 技术栈的核心之一,CI/CD 离不开编写 Pipeline 脚本,上手 Jenkins ,简单查一下文档
- 要了解JavaScript对象,我们可以从对象创建、属性操作、对象方法这几个方面入手。概括起来,包括以下几模块: 1.
- 我们平常在网页上显示的字体最小一般是12PX,当小于10PX时,显示的效果就大打折扣了,因为中文默认的字体是宋体,当小于12PX时的效果如下
- 本文实例讲述了python实现合并两个数组的方法。分享给大家供大家参考。具体如下:python合并两个数组,将两个数组连接成一个数组,例如,
- 这篇文章将会为大家介绍GoFrame gset使用入门,为了让大家更好的理解,会简明扼要的分析一下集合类型Set的特点,对比一下Java、P
- 而今天我们要说的内容是:如果在网页中存在文件资源,如:图片,电影,文档等。怎样通过Python爬虫把这些资源下载下来。1、怎样在网上找资源:
- 本文实例讲述了JavaScript实现解析INI文件内容的方法。分享给大家供大家参考,具体如下:.ini 是Initialization F
- 从某个页面表单中取出信息是ASP编程中常见的问题。但是,遍历通过表单传递的记录会花去多长时间呢?这取决于数据库的大小。简单的GUI界面都可能
- Python 队列Queue 队列是一种先进先出(FIFO)的数据类型, 新的元素通过 入队 的方式添加进 Queue 的末尾, 出队 就是
- tkinter如何实现下拉框联动有些小伙伴想在GUI界面上实现像前端一样的下拉框联动的效果,但是前端可以通过Ajax实现,GUI如何实现呢,
- 本文实例为大家分享了Python实现俄罗斯方块游戏的具体代码,供大家参考,具体内容如下玩法:童年经典,普通模式没啥意思,小时候我们都是玩加速