导航:首页 > 编程语言 > python转换cython

python转换cython

发布时间:2023-08-24 22:08:07

python和cython是什么关系

Python和c的混血Cython作为一个Python的编译器,在科学计算方面很流行,用于提高Python的速度,通过OpenMPI库还可以进行吧并行计算。

⑵ python安装pyffmpeg,cython报错:ImportError: No mole named Cython.Distutils

巧了,我今天也遇到了~
去搜下 visual c++ 2008 express edition ,安装完之后就可以安装cython了

⑶ python文件是以什么为扩展名的文件

..py - 常规脚本
.py3 - Python3脚本(Python3脚本通常以.py而不是.py3结尾,很少使用)
.pyc - 编译的脚本(字节码)
.pyo - 优化的pyc字节码文件(从Python3.5开始,Python将只使用pyc而不是pyo和pyc)
.pyw - 用pythonw.exe执行的Windows的Python脚本
.pyx - 将Cython src转换为C/C++
.pyd - 作为Windows DLL创建的Python脚本
.pxd - 相当于C/C++头文件的Cython脚本
.pyi - MyPy存根
.pyi - 存根文件(PEP 484)
.pyz - Python脚本归档(PEP 441)(这是一个包含标准Python脚本头之后的二进制形式的压缩Python脚本(ZIP)的脚本)
.pywz - 用于MS-Windows的Python脚本归档(PEP 441)(这是一个包含标准Python脚本头之后的二进制形式的压缩Python脚本(ZIP)的脚本)

⑷ 有没有能把python代码转换为c语言代码的工具

C++兼容C语言,但C语言不可能兼容C++
所以,C++代码直接转是转不了C的。
只能从逻辑上,对C++的许多语法进行代码上的重新实现。
比如将对象转换为结构体,将对象封装的函数修改为独立函数,增加对象参数。
将重载去掉,而是根据需要调用非重载的不同名的函数。
总之来说,硬要将C++转为C实现的话,那代码重写的工作是避免不了的。

⑸ python怎么使用cython

1. Cython是什么?

它是一个用来快速生成Python扩展模块(extention mole)的工具

语法是Python和c的混血

Cython作为一个Python的编译器,在科学计算方面很流行,用于提高Python的速度,通过OpenMPI库还可以进行吧并行计算。

2. Cython安装(Windows)

我的环境是win7 x64, python27, vs2010

安装的基础是有一个c编译器(这里以vs2010为例)

从http://cython.org下载安装包,解压到一目录,进入该目录,在cmd命令行中执行

python setup.py install

注:执行过程可能遇到问题:Windows下pip安装包报错:Microsoft Visual C++ 9.0 is required Unable to find vcvarsall.bat

解决方案:下载Microsoft Visual C++ Compiler for Python 2.7,点击直接安装即可。

3. 例子

例3.1:入门

创建hello.pyx,内容如下

def say_hello():
print "Hello World!"

创建setup.py,内容如下

from distutils.core import setup
from Cython.Build import cythonize
setup(name = 'Hello world app',
ext_moles = cythonize("hello.pyx"))

编译Cython代码

step1: 把.pyx文件被Cython便以为.c文件
step2: 把.c文件编译为可导入的使用模块.so(Windows下为.pyd)文件

1
2

python setup.py build
python setup.py install

注:可能出现问题:Unable to find vcvarsall.bat

原因:Python 2.7 会搜索 Visual Studio 2008.如果你电脑上没有这个版本的话就会报错。

如果装的是vs2010,那么在cmd命令行中执行

1

SET VS90COMNTOOLS=%VS100COMNTOOLS%

如果装的是vs2010,那么在cmd命令行中执行

1

SET VS90COMNTOOLS=%VS110COMNTOOLS%

执行

1
2
3

>>> import hello
>>> hello.say_hello()
Hello World!例3.2 通过静态类型提高速度

在Cython中可以通过标记静态类型来提高速度,凡是标记为静态类型的部分都会将动态语言类型变为简单的c代码,从而提速。

但是如果滥用静态类型,会降低可读性,甚至因类型设置不当导致错误类型检查造成速度降低。

例3.2.1 静态类型变量

Python原生态代码

compute.pyx

def f(x):
return x ** 2 - x
def integrate_f(a, b, N):
s = 0
dx = (b - a) / N
for i in range(N):
x += f(a + i * dx)
return s * dx

setup.py

from distutils.core import setup
from Cython.Build import cythonize
setup(
name = 'Hello world app',
ext_moles = cythonize("compute.pyx"),
)

test.py

import compute
import time
starttime = time.clock()
compute.integrate_f(3.2, 6.9, 1000000)
endtime = time.clock()
print "read: %f s" %(endtime - starttime)

执行

1
2
3

python setup.py build
python setup.py install
python test.py

结果

1

read: 0.332332 s

使用静态变量替换后的代码

compute2.pyx

def f(double x):
return x ** 2 - x
def integrate_f(double a, double b, int N):
cdef int i
cdef double s, dx
s = 0
dx = (b - a) / N
for i in range(N):
s += f(a + i * dx)
return s * d

setup2.py

from distutils.core import setup
from Cython.Build import cythonize
setup(
name = 'Hello world app',
ext_moles = cythonize("compute2.pyx"),
)

test2.py

import compute2
import time
starttime = time.clock()
compute2.integrate_f(3.2, 6.9, 1000000)
endtime = time.clock()
print "read: %f s" %(endtime - starttime)

执行

1
2
3

python setup.py build
python setup.py install
python test.py

结果

1

read: 0.109200s

结论

该测试用例,使用静态类型速度是不使用静态类型的3倍。

例3.2.2 静态类型函数

把compute2.pyx中的函数变为

cdef double f(double x):
return x ** 2 - x
def integrate_f(double a, double b, int N):
cdef int i
cdef double s, dx
s = 0
dx = (b - a) / N
for i in range(N):
s += f(a + i * dx)
return s * dx

结果

1

read: 0.084859 s

结论:比例子3.2.1速度又快了

例3.3 调用C函数

cdef extern from "math.h":
double sin(double)
double cos(double)

cpdef double Sin(double x):
return sin(x)

cpdef double Cos(double x):
return cos(x)

cpdef: 对于Python可使用的函数使用(为了使得在以后的Python程序中调用Sin,Cos函数,用cpdef,而不用cdef)
cdef: 对于C可使用的函数使用

请注意,上面的代码声明了 math.h 里的函数,提供给 Cython 使用。C编译器在编译时将会看到 math.h 的声明,但 Cython 不会去分析 math.h 和单独的定义。

⑹ 目前cpython调用C/C++的主流手段是cython么

还可以使用Cython来实现混编
1 下载Cython,用Python setup.py install进行安装
2 一个实例

① 创建helloworld目录创建helloworld.pyx,内容如下:cdef extern from"stdio.h": extern int printf(const char *format, ...) def SayHello(): printf("hello,world\n")
② 编译,最方便的是利用python的Distutils了,
helloworld目录下创建Setup.py,内容如下:from distutils.core import setupfrom distutils.extension import Extensionfrom Cython.Build import cythonize setup( name = 'helloworld', ext_moles=cythonize([ Extension("helloworld", ["helloworld.pyx"]), ]),) 编译:python Setup.py build安装:python Setup.py install安装后,会将在build/lib.???目录下生成的helloworld.pyd拷贝到Lib/site-packages注: 有时我们只是希望测试一下,并不希望安装,这时可以把build/lib.???目录下的helloworld.pyd拷贝到当前目录 或者在importhelloworld前执行脚本:import sys;sys.path.append(pathof helloworld.pyd) ③ 测试:>>>import helloworld >>>helloworld.SayHello() hello,world

⑺ pypy如何把python的py文件编译成c代码

pypy是用python实现的python,区别于cPython,和C没什么关系,你要用python写C,需要的是Cython。具体看文档,没那么难。

阅读全文

与python转换cython相关的资料

热点内容
如何在服务器上配置外网网址 浏览:838
阿里云服务器的硬件在哪里 浏览:52
python自动注册谷歌 浏览:329
phpini验证码 浏览:824
解压后的文件怎么驱动 浏览:326
老板要程序员加班 浏览:414
泰尔pdf 浏览:311
视频转码压缩哪款软件好 浏览:647
盯盯拍记录仪下载什么app 浏览:436
新东方新概念英语pdf 浏览:696
python中如何创建菜单栏 浏览:507
中石化app那个叫什么名 浏览:706
借贷宝合集解压密码 浏览:640
python爬取网页代码 浏览:480
efs加密对微信无效 浏览:496
刘秀pdf 浏览:998
脚上长黑刺是什么app 浏览:703
算法工程师上海 浏览:390
php的循环语句怎么写 浏览:289
画圣诞树用什么软件python 浏览:452