>  기사  >  백엔드 개발  >  Cython 설치 및 사용 경험 공유

Cython 설치 및 사용 경험 공유

Y2J
Y2J원래의
2017-04-17 17:05:474727검색

1. Cython이란 무엇인가요?

Python 확장 모듈(확장 모듈) 도구

해당 구문은 Python 언어 구문과 c 언어 구문

을 혼합한 것입니다. swig보다 Python 확장 모듈을 작성하는 것이 더 쉽습니다

아마 swig가 c 헤더 파일을 통해 직접 확장 모듈을 생성할 수 있다고 말할 수도 있지만 swig는 콜백 함수를 잘 지원하지 않습니다.

또한 swig를 사용하면 입력 매개변수를 python객체로 변환하고 출력을 python 객체로 변환하는 추가 코드를 작성해야 하는 경우가 많습니다. C 함수 매개변수가 입출력인 경우, C 함수의 매개변수에 콜백 함수가 있는 경우

, Cython에서는 int, float 등 C의 유형이 , long, char* 등은 모두 필요할 때 자동으로 Python 객체로 변환하거나, 변환에 실패하면 예외가 발생합니다. Cython의 가장 놀라운 점

게다가 Cython은 콜백 함수도 잘 지원합니다.

요컨대 Python 확장 모듈을 작성해야 한다면 Cython은 정말 좋은 도구입니다

2. cython으로 변환

cython은 linux에 설치됩니다:

1.

2. pip 패키지 설치

[blueelwang@pythontab ~]$ wget https://pypi.python.org/packages/b7/67/7e2a817f9e9c773ee3995c1e15204f5d01c8da71882016cac10342ef031b/Cython-0.25.2.tar.gz
[blueelwang@pythontab ~]$ tar xzvf Cython-0.25.2.tar.gz
[blueelwang@pythontab ~]$ cd Cython-0.25.2
[blueelwang@pythontab ~]$ python setup.py install

3. Ubuntu에서 설치

[blueelwang@pythontab ~]$ sudo pip install Cython --install-option="--no-cython-compile"

설치 후 cython을 입력하여 설치 성공 여부를 확인합니다

3. >

1. .pyx 확장자 cython 프로그램 hello.pyx로 작성

[blueelwang@pythontab ~]$ sudo apt-get install cython

2. Python 프로그램 setup.py를 작성

목적은 hello.pyx 프로그램을 다음으로 변환하는 것입니다. hello.c를 작성하여 so 파일

def say_hello_to(name):
    print("Hello %s!" % name)

으로 컴파일합니다. 3. Python 프로그램

from distutils.core import setup
from distutils.extension import Extension
from Cython.Distutils import build_ext
ext_modules = [Extension("hello", ["hello.pyx"])]
setup(
  name = 'Hello world app',
  cmdclass = {'build_ext': build_ext},
  ext_modules = ext_modules
)

을 실행하면 hello.c와 hello.so(Py

를 사용하여 캡슐화된 파일)라는 두 개의 파일이 생성됩니다. Object

*)4. Python을 사용하여 hello.so를 호출하고 호출 파일은 test.py입니다.

[blueelwang@pythontab ~]$ python setup.py build_ext --inplace

cython의 주요 목적은 다음과 같습니다. 번거로운 캡슐화 프로세스를 단순화합니다. Python이 C 언어 프로그램을 호출하고 Python 코드의 실행 속도를 향상시킵니다. (C 언어의 실행 속도는 Python보다 빠릅니다.)

위 내용은 Cython 설치 및 사용 경험 공유의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.