当前位置: 首页 > 编程笔记 >

pyx文件 生成pyd 文件用于 cython调用的实现

欧君之
2023-03-14
本文向大家介绍pyx文件 生成pyd 文件用于 cython调用的实现,包括了pyx文件 生成pyd 文件用于 cython调用的实现的使用技巧和注意事项,需要的朋友参考一下

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 

即可~

以上为个人经验,希望能给大家一个参考,也希望大家多多支持小牛知识库。如有错误或未考虑完全的地方,望不吝赐教。

 类似资料:
  • 在使用时,这些构建文件是否通常被隐藏?我之所以感到疑惑,是因为我想更改我创建的一个名称不佳的的名称,并发现这些文件中也引用了该名称。

  • 问题内容: 是否可以使用(编译为)创建Python2.7软件包?如果可以,怎么办?我没有运气让它工作。 这是我尝试过的: : from distutils.core import setup from distutils.extension import Extension from Cython.Distutils import build_ext foo = Extension(name=’f

  • 问题内容: 我已经在Cython和BuvinJ的“如何有效地混淆Python代码?并想测试用Cython编译的源代码在编译后是否真的“不再存在”了。的确,使用Cython是保护Python源代码的一种方式,这确实是一种流行的观点,例如,参见文章“使用Cython保护Python源”。 让我们举一个简单的例子: 然后让我们使用Cython: 这产生一个。让我们编译一下: 有用!它产生一个140KB的

  • 使用 Hexo 生成静态文件快速而且简单。 $ hexo generate 监视文件变动 Hexo 能够监视文件变动并立即重新生成静态文件,在生成时会比对文件的 SHA1 checksum,只有变动的文件才会写入。 $ hexo generate --watch 完成后部署 您可执行下列的其中一个命令,让 Hexo 在生成完毕后自动部署网站,两个命令的作用是相同的。 $ hexo generate

  • 我在AS中有一个带有本机库的项目。我正在尝试使用实验插件(gradle实验:0.6.0-alpha5)来获取. so文件(稍后在System.loadLibrary()中使用它)。但是我不能生成它们。我真的不明白,为什么? 我用这个指令编写了build.gradle。这是: 尝试运行应用程序时出现的错误: java.lang.无法从加载器加载ImageProcdalvik.system.PathC

  • 问题内容: 我试图将XML数据从网页转换为PDF文件,希望能完全在JavaScript中完成。我需要能够绘制文本,图像和简单形状。我希望能够完全在浏览器中做到这一点。 问题答案: 示例创建一个“ Hello World” PDF文件。