1.写一个test.pyx(一般是py,但为了用cython编译,我们需要把后缀改成.pyx )
import time
def prime_num(max_num):
for num in range(2, max_num):
if num < 2:
pass
elif num == 2:
pass
else:
for i in range(2, num):
if num % i == 0:
pass
else:
print(num)
if __name__=='__main__':
start=time.time()
prime_num(100000)
print(time.time()-start)
'''run time:22.940618753433228'''
2. 在同目录下,准备一个执行cython编译的脚本:setup.py
from distutils.core import setup
from distutils.extension import Extension
from Cython.Distutils import build_ext
filename = 'test' # 源文件名
full_filename = 'test.pyx' # 包含后缀的源文件名
setup(
cmdclass={'build_ext': build_ext},
ext_modules=[Extension(filename, [full_filename])] # 配置需要cython编译的源文件
)
3.CMD进入该目录,执行 python setup.py build_ext --inplace
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
如果出现“error: Unable to find vcvarsall.bat”的错误
Python3.5在Windows环境下安装一些模块时,会出现“error: Unable to find vcvarsall.bat”的错误,主要原因是因为Python的Setup需要调用vcvarsall.bat的文件,这个文件在C++的编程环境中才会有。有两种方法解决:安装MinGW;安装VS。安装VS的方法比较彻底一些,适用于python各个版本。
1. 检查Python安装路径中的_msvccompiler.py文件看需要什么版本的VS。
一般的路径:C:\python35\Lib\distutils\_msvccompiler.py
在该文件中找到_find_vcvarsall方法,其中类似“if version >= 14 and version > best_version:”的语句中,这里是14说明要VS的版本在14及以上才可以,那么要安装的就是VS2015。(其他的版本,如9就是需要VS10即可)
VS下载地址:https://my.visualstudio.com/Downloads?q=Visual
2. 下载安装VS2015。在安装时,一定要勾选C++环境,以及Python Tools for Visual Studio。我之前安装过VS2015,但是在Python中依然出现标题中的问题,原因就是没有选择这两个选项。如果在安装过程,出现了一直停留在“Configuring Your System”的问题,可以把VS进程杀掉试试。
原文:https://blog.csdn.net/youngwhz1/article/details/53303769
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
编译成功后,在同目录下会生成以下编译好的文件(后缀是.pyd) ,它可以被python直接import,为了import找错文件,我们这里删掉test.pyx
4.使用
import test
test.prime_num(100000)
'''13.06978225708008'''
5.与上述无关的内容,很好奇我用pypy+cython试试
哎。。。。
pypy却快了将近20倍,实际上:这是因为我们仍旧采用纯python的语法来编写。这样尽管用cython来编译,执行的时候还是按照python的那一套来运行的。因此效率并不会提升。但是,正因为是用cython编译,我们可以在test.pyx上对源代码进行修改,加入C语言的一些语法,这样就能快很多了。