前几天入了一下cython的坑,发现其实已经算第二次了,第一次应该是swig的坑.
Cython是一个Python的C/C++的扩展库,然后就可以用Python跑C++的代码了。
VirtualEnv
首先是Virtualenv是一个虚拟的Python环境,其实它比原生的python环境复杂,但是它的特点是无论你手多么残,都只是影响虚拟环境, 还有避免你的Python环境装过多的包,已经移植方便。
virtualenv venv
它会在当前的文件夹下创建一个venv的文件夹,里面有三个子文件夹,Scripts,Include,Lib
其中Scripts会有一些脚本,激活虚拟环境的代码就在里面,Include里面有Python的安装包的路径,一般在site-packages里面
在windows下面,通过
venv\Scripts\activate
来激活环境,其实就是运行相应的bat脚本
Cython
这个扩展库可以由python自动生成C++代码然后再由C++生成C++的扩展模块库。所以的顺序是先由
pyx,也就是python要转化为C++的代码,用例子是
这个中文博客的蛮适合入门的 Cython学习
# hello.pyx
def say_hello():
print "Hello World!"
然后我们通过cythonize来把它变成c++的代码
下面的代码集成了几步。
from distutils.core import setup
from Cython.Build import cythonize
setup(name = 'Hello world app', ext_modules = cythonize("hello.pyx"))
通过
python setup.py build
我们会发现文件夹下面多了一个 文件
打开以后代码有两千行,开头说明了 generated by cython
然后我们通过
python setup.py install
把它加进我们的库里面,你会发现site-packages里面多了两个文件
pyd其实就是dll文件,它能被python调用。
然后我们能够顺利地把它当模块导入了。其中egg-info文件我们打开以后 是一些信息,文件如其名。