日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

cpython教程_python高性能扩展工具-cython教程1快速入门

發布時間:2025/3/8 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 cpython教程_python高性能扩展工具-cython教程1快速入门 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Cython不僅僅是一種編程語言。它的起源可以追溯到SAGE數學軟件包,它用于提高數學計算性能,例如涉及矩陣的計算。更一般地說,我傾向于將Cython視為SWIG的替代品,為本機代碼生成非常好的Python綁定。

SWIG是最早和最好之一,用于生成多種語言的綁定的工具。 Cython僅限Python代碼。

通過生成語言綁定來處理遺留軟件的很好方式,對C / C ++編寫的遺留應用程序,用Python添加新功能。

第一章將專注于使用Cython的核心概念

安裝Cython

Hello World

使用distutils

Python調用C函數

類型轉換

安裝

Linux及Mac:

pip install Cython

Linux發行版本:

$ yum install cython

# will work on Fedora and Centos

$ apt-get install cython # will work on Debian based systems.

Hello World!

helloworld.pyx

#!/usr/bin/env python3

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

# Author: xurongzhong#126.com

# CreateDate: 2018-9-20

# 技術支持qq群: 144081101 591302926 567351477 釘釘免費群:21745728

print("Hello World from cython!")

Makefile

all:

cython -3 -o helloworld.c helloworld.pyx

gcc -g -O2 -fpic -c helloworld.c -o helloworld.o `python3-config --cflags`

gcc -g -O2 -shared -o helloworld.so helloworld.o `python3-config --libs`

clean:

rm -rf *.c *.o *.so build

執行

$ make

cython -3 -o helloworld.c helloworld.pyx

gcc -g -O2 -fpic -c helloworld.c -o helloworld.o `python3-config --cflags`

gcc -g -O2 -shared -o helloworld.so helloworld.o `python3-config --libs`

$ python

Python 3.6.5 |Anaconda, Inc.| (default, Apr 29 2018, 16:14:56)

[GCC 7.2.0] on linux

Type "help", "copyright", "credits" or "license" for more information.

>>> import helloworld

Hello World from cython!

image.png

使用distutils編譯

#!/usr/bin/env python3

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

# Author: xurongzhong#126.com

# CreateDate: 2018-9-20

# 技術支持qq群: 144081101 591302926 567351477 釘釘免費群:21745728

from distutils.core import setup

from Cython.Build import cythonize

setup(

ext_modules = cythonize("helloworld.pyx")

)

執行

$ python setup.py build_ext --inplace

running build_ext

building 'helloworld' extension

gcc -pthread -B /usr/local/anaconda/compiler_compat -Wl,--sysroot=/ -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -I/usr/local/anaconda/include/python3.6m -c helloworld.c -o build/temp.linux-x86_64-3.6/helloworld.o

gcc -pthread -shared -B /usr/local/anaconda/compiler_compat -L/usr/local/anaconda/lib -Wl,-rpath=/usr/local/anaconda/lib -Wl,--no-as-needed -Wl,--sysroot=/ build/temp.linux-x86_64-3.6/helloworld.o -o /home/andrew/code/cython-book/chapter1/helloworld/helloworld.cpython-36m-x86_64-linux-gnu.so

$ python

Python 3.6.5 |Anaconda, Inc.| (default, Apr 29 2018, 16:14:56)

[GCC 7.2.0] on linux

Type "help", "copyright", "credits" or "license" for more information.

>>> import helloworld

Hello World from cython!

此處如果不添加 --inplace,則編譯在默認目錄

$ python setup.py build_ext

running build_ext

building 'helloworld' extension

gcc -pthread -B /usr/local/anaconda/compiler_compat -Wl,--sysroot=/ -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -I/usr/local/anaconda/include/python3.6m -c helloworld.c -o build/temp.linux-x86_64-3.6/helloworld.o

gcc -pthread -shared -B /usr/local/anaconda/compiler_compat -L/usr/local/anaconda/lib -Wl,-rpath=/usr/local/anaconda/lib -Wl,--no-as-needed -Wl,--sysroot=/ build/temp.linux-x86_64-3.6/helloworld.o -o build/lib.linux-x86_64-3.6/helloworld.cpython-36m-x86_64-linux-gnu.so

在root下面執行python3 setup.py install則會安裝為系統庫

# python3 setup.py build_ext

running build_ext

# python3 setup.py install

running install

running build

running build_ext

running install_lib

copying build/lib.linux-x86_64-3.6/helloworld.cpython-36m-x86_64-linux-gnu.so -> /usr/local/anaconda/lib/python3.6/site-packages

running install_egg_info

Writing /usr/local/anaconda/lib/python3.6/site-packages/UNKNOWN-0.0.0-py3.6.egg-info

Python調用C函數

AddFunction.c

#include

int AddFunction(int x, int y) {

printf("look we are within your c code!!\n");

return x + y;

}

AddFunction.h

#ifndef __ADDFUNCTION_H__

#define __ADDFUNCTION_H__

extern int AddFunction(int, int);

#endif //__ADDFUNCTION_H__

PyAddFunction.pyx

#!/usr/bin/env python3

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

# Author: xurongzhong#126.com

# CreateDate: 2018-9-20

# 技術支持qq群: 144081101 591302926 567351477 釘釘免費群:21745728

cdef extern from "AddFunction.h":

cdef int AddFunction(int, int)

def Add(a, b):

return AddFunction(a, b)

執行

$ make

cython -3 PyAddFunction.pyx

gcc -g -O2 -fpic -c PyAddFunction.c -o PyAddFunction.o `python3-config --includes`

gcc -g -O2 -fpic -c AddFunction.c -o AddFunction.o

gcc -g -O2 -shared -o PyAddFunction.so AddFunction.o PyAddFunction.o `python3-config --libs`

$ python

Python 3.6.5 |Anaconda, Inc.| (default, Apr 29 2018, 16:14:56)

[GCC 7.2.0] on linux

Type "help", "copyright", "credits" or "license" for more information.

>>> from PyAddFunction import Add

>>> Add(1,2)

look we are within your c code!!

3

參考資料

總結

以上是生活随笔為你收集整理的cpython教程_python高性能扩展工具-cython教程1快速入门的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。