又是因为别人代码里有这么一个部分,用到了cython,,简而言之,就是利用这个模块调用C语言,从而加速程序运行,其中具体怎么调用我还没整清楚,但基本用法差不多了解了。

1 安装:https://www.lfd.uci.edu/~gohlke/pythonlibs/    在这个里面找到 根据自己的版本找到cython 然后 pip install ....whl

2 编写代码:需要两个 test.py 和  setup.py  创建在自己的python目录下(我创建了一个cython文件)-e.g: C:\Python27\cython

参考:https://www.cnblogs.com/jianmu/p/7497274.html?utm_source=debugrun&utm_medium=referral

# test.py
def
say_hello(): print "hello world"
# setup.py
from
distutils.core import setup from Cython.Build import cythonize   setup(ext_modules = cythonize("test.py"))

3 编译代码:在cmd运行窗口将位置改到刚才创建的文件夹--然后 编译这段话 :

python setup.py build_ext  --inplace

可能出现如下错误:找不到 error: Unable to find vcvarsall.bat

一般解决办法:直接CMD中输入set 看看目前路径设置情况,发现只有VS140COMNTOOLS 的位置,没有 VS90COMNTOOLS 的位置(python2.x都是要配置VS90的路径)所以需要将VS140的位置复制给VS90:

CMD输入SET VS90COMNTOOLS=%VS140COMNTOOLS%(VS140=VS2015,PS:如果是python3.x 则要设置VS100的位置)

重新输入SET,看到下面两个地址都有的位置;还有就是,可能这会儿关了,一会而又要重新设置,所以我在电脑-属性-高级设置-环境变量的系统变量中加入了值:VS90COMNTOOLS=%VS140COMNTOOLS%(不知道有没有用)

上面解决完后,,如果没有大问题,再次输入python setup.py build_ext  --inplace就成功了

4 检验模块 进入python,,输入

import test 
test.say_hello()

5 上面只是我的测试部分,我真正要执行的是别的:

在执行编译代码部分:之前需要的文件包括test.py 和setup.py 但是这里别人代码里的是 CMacroDemand.pyx 和 setup.py

.py 和 .pyx 应该是都可以编译的;

6 setup 文件到底怎么写:

我的setup里面要导入numpy,所以 include_dirs=[numpy.get_include()],这句不能少,因为之前有问题让我我删掉 include_dirs过,后来又提示有问题

Cython: fatal error: 'numpy/arrayobject.h' file not found, using numpy

解决方案:https://stackoverflow.com/questions/39114132/cython-fatal-error-numpy-arrayobject-h-file-not-found-using-numpy

 

Cython结合Numpy也很方便。

如果使用numpy的话,一般setup.py要这样写:

from distutils.core import setup, Extension
from Cython.Build import cythonize
import numpy

setup(ext_modules=cythonize("test.pyx"),include_dirs=[numpy.get_include()])

作者:季文瀚
链接:https://www.zhihu.com/question/23003213/answer/105223038

然后 可以直接输入

python setup.py build(比之前那个少一点东西,估计也是参数位置等问题我也不研究了,我用的就是这句)

具体用用哪句看看这个把:https://www.cnblogs.com/freeweb/p/6548208.html 

编译完之后

 

会有一个build文件夹--lib文件夹,里面有.pyd文件,我的是从里面挪出来的,就可以import 模块了。

 

ps:一些别的cython完整流程的博客:

https://www.cnblogs.com/nucdy/p/7736155.html

https://zhuanlan.zhihu.com/p/24311879

 

PPS:最后的最后,我刚刚试了一下,,在别的地方用python-- import CUtils,还不行,,必须要在那个cython文件夹下面才可以用,拷贝也行。