Pytorch 学习(10):Python Cython扩展(python pyx代码-----C 代码 ----python代码调用)

版权声明:王家林大咖2018年新书《SPARK大数据商业实战三部曲》清华大学出版,清华大学出版社官方旗舰店(天猫)https://qhdx.tmall.com/?spm=a220o.1000855.1997427721.d4918089.4b2a2e5dT6bUsM https://blog.csdn.net/duan_zhihua/article/details/83547929

 Cython是具有C数据类型的Python,几乎任何一个Python代码都是有效的Cython代码。Cython编译器将把python代码转换成C代码,对Python/C API进行等效调用。

 python代码------>C 代码 ------->python代码调用

 在spyder中新建一个fib.pyx文件:

def fib(long n):
    '''Returns the nth Fibonacci number.'''
    cdef long a=0, b=1, i
    for i in range(n):
        a, b = a + b, a
    return a

 

spyder新建一个setup.py文件:

# -*- coding: utf-8 -*-

from distutils.core import setup
from Cython.Build import cythonize
#cythonize:编译源代码为C或C++,返回一个distutils Extension对象列表
setup(ext_modules=cythonize('fib.pyx'))
 

进入setup的当前目录,在windows cmd命令行中运行:

D:\vcProjects2018\clion\cython_exercise>python setup.py build_ext -i
Compiling fib.pyx because it changed.
[1/1] Cythonizing fib.pyx
running build_ext
building 'fib' extension
creating build
creating build\temp.win-amd64-3.6
creating build\temp.win-amd64-3.6\Release
G:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\BIN\x86_amd64\cl.exe /c /nologo /Ox /W3 /GL /DNDEBUG /MD -IG:\ProgramData\Anaconda3\include -IG:\ProgramData\Anaconda3\include "-IG:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INCLUDE" "-IG:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\ATLMFC\INCLUDE" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.10240.0\ucrt" "-IC:\Program Files (x86)\Windows Kits\NETFXSDK\4.6.1\include\um" "-IC:\Program Files (x86)\Windows Kits\8.1\include\\shared" "-IC:\Program Files (x86)\Windows Kits\8.1\include\\um" "-IC:\Program Files (x86)\Windows Kits\8.1\include\\winrt" /Tcfib.c /Fobuild\temp.win-amd64-3.6\Release\fib.obj
fib.c
G:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\BIN\x86_amd64\link.exe /nologo /INCREMENTAL:NO /LTCG /DLL /MANIFEST:EMBED,ID=2 /MANIFESTUAC:NO /LIBPATH:G:\ProgramData\Anaconda3\libs /LIBPATH:G:\ProgramData\Anaconda3\PCbuild\amd64 "/LIBPATH:G:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\LIB\amd64" "/LIBPATH:G:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\ATLMFC\LIB\amd64" "/LIBPATH:C:\Program Files (x86)\Windows Kits\10\lib\10.0.10240.0\ucrt\x64" "/LIBPATH:C:\Program Files (x86)\Windows Kits\NETFXSDK\4.6.1\lib\um\x64" "/LIBPATH:C:\Program Files (x86)\Windows Kits\8.1\lib\winv6.3\um\x64" /EXPORT:PyInit_fib build\temp.win-amd64-3.6\Release\fib.obj /OUT:D:\vcProjects2018\clion\cython_exercise\fib.cp36-win_amd64.pyd /IMPLIB:build\temp.win-amd64-3.6\Release\fib.cp36-win_amd64.lib
fib.obj : warning LNK4197: 多次指定导出“PyInit_fib”;使用第一个规范
  正在创建库 build\temp.win-amd64-3.6\Release\fib.cp36-win_amd64.lib 和对象 build\temp.win-amd64-3.6\Release\fib.cp36-win_amd64.exp
正在生成代码
已完成代码的生成

 编译器自动生成fib.cp36-win_amd64.pyd文件和fib.c文件。

 fib.c文件部分源代码如下:

/* Generated by Cython 0.28.2 */

/* BEGIN: Cython Metadata
{
    "distutils": {
        "name": "fib",
        "sources": [
            "fib.pyx"
        ]
    },
    "module_name": "fib"
}
END: Cython Metadata */

#define PY_SSIZE_T_CLEAN
#include "Python.h"
#ifndef Py_PYTHON_H
    #error Python headers needed to compile C extensions, please install development version of Python.
#elif PY_VERSION_HEX < 0x02060000 || (0x03000000 <= PY_VERSION_HEX && PY_VERSION_HEX < 0x03030000)
    #error Cython requires Python 2.6+ or Python 3.3+.
#else
........

 新建一个fib_test.py文件,导入已将python文件转换为c代码的库:

# -*- coding: utf-8 -*-
import sys
sys.path.append(r'D:\vcProjects2018\clion\cython_exercise')
sys.path
from fib import fib
print(fib(20))

运行结果如下:

猜你喜欢

转载自blog.csdn.net/duan_zhihua/article/details/83547929