사이튼

Cython
사이튼
디벨로퍼로버트 브래드쇼, 스테판 베넬 등
첫 등장2007년 7월 28일; 16년 전 (2007-07-28)[1]
안정적 해제3.0.2[2] (2023년 8월 27일, 41일 전(2023년 8월 27일)) [±]
프리뷰 릴리즈3.0.0 베타 2 (2023년 3월 27일, 6개월 전(2023-03-27))[3] [±]
구현언어파이썬
OS윈도우, macOS, 리눅스
면허증.아파치 라이선스 2.0
파일 확장명.pyx, .pxd, .pxi [4]
웹사이트cython.org Edit this at Wikidata
영향을 받음
C, 파이썬

Cython(/ ˈsa ɪθɒn/)은 프로그래밍 언어 Python하위 집합으로, 개발자들이 C와 비슷한 성능을 내는 Python 코드(선택적으로 C에서 영감을 받은 구문 확장 기능이 있는)를 작성할 수 있게 해줍니다.

Cython은 CPython 확장 모듈을 생성하는 데 일반적으로 사용되는 컴파일된 언어입니다.주석이 달린 Python 유사 코드는 C(예: C++에서도 사용 가능)로 컴파일된 다음 인터페이스 코드로 자동 랩핑되어 Import 문을 사용하여 일반 Python 코드로 로드하여 사용할 수 있는 확장 모듈을 생성하지만 런타임에 계산 오버헤드가 현저히 적습니다.Cython은 독립적인 C 또는 C++ 코드를 python-importable 모듈로 래핑하는 것도 용이합니다.

Cython은 Python과 C로 작성되어 있으며 Windows, macOS, Linux에서 작동하며 CPython 2.6, 2.7, 3.3 이상 버전과 호환되는 C 소스 파일을 생성합니다.Cython이 컴파일(C로)하는 Cython 소스 코드는 Cython 0.x(현재 알파 소프트웨어인 Cython 3.x)의 Python 2 구문과 Python 3 구문을 기본값으로 사용할 수 있습니다.기본값은 Python 3(또는 2) 구문으로 재정의될 수 있습니다(예: 소스 코드 주석).Python 3 구문이 최근 버전에서 변경되었기 때문에 Cython은 최신 추가 기능에 대해 최신 버전이 아닐 수도 있습니다.Cython은 "대부분의 C++ 언어에 대한 네이티브 지원"과 "기존의 거의 모든 파이썬 코드를 컴파일"합니다.[7]

싸이톤 3.0.0은 2023년 7월 17일에 출시되었습니다.[8]

설계.

Cython은 표준 Python 모듈을 제작함으로써 작동합니다.그러나 동작은 원래 파이썬으로 작성된 모듈 코드가 C로 번역된다는 점에서 표준 파이썬과 다릅니다.결과 코드는 빠르지만 실제 작업을 수행하기 위해 CPython 인터프리터와 CPython 표준 라이브러리에 많은 호출을 합니다.이 배열을 선택하면 Cython의 개발 시간이 상당히 절약되지만 모듈은 Python 인터프리터와 표준 라이브러리에 의존합니다.

대부분의 코드가 C 기반이지만, 해석된 파이썬으로 작성된 작은 스터브 로더가 일반적으로 필요합니다. (Cython의 문서화되지 않은 내부와 관련된 작업을 포함하여 완전히 C로 작성된 로더를 만드는 것이 목표가 아니라면)그러나 이것은 파이썬 인터프리터의 존재로 인해 큰 문제는 아닙니다.[9]

Cython에는 C/C++ 루틴을 호출하기 위한 외부 기능 인터페이스가 있으며 서브루틴 파라미터 및 결과의 정적 유형, 로컬 변수 및 클래스 속성을 선언할 수 있습니다.

해당 Python 프로그램과 동일한 알고리즘을 구현하는 Cython 프로그램은 CPython과 Cython 실행 모델의 차이로 인해 코어 메모리, 프로세싱 사이클 등의 컴퓨팅 자원 소모가 적을 수 있습니다.기본 Python 프로그램은 CPython 가상 머신에 의해 로드되고 실행되므로 런타임과 프로그램 자체가 컴퓨팅 리소스를 소비합니다.Cython 프로그램은 C 코드로 컴파일되고, C 코드는 머신 코드로 추가 컴파일되므로 프로그램이 로드될 때 가상 머신은 짧게만 사용됩니다.[10][11][12][13]

Cyton의 직원은 다음과 같습니다.

  • 최적화
  • 유형 추론(옵션)
  • 제어 구조의 오버헤드가 적음
  • 저기능 통화 오버헤드[14][15]

성능은 Cython에 의해 생성되는 C 코드와 C 컴파일러에 의해 어떻게 컴파일되는지에 따라 달라집니다.[16]

역사

싸이톤은 파이렉스 언어의 파생어로 파이렉스보다 더 많은 기능과 최적화를 지원합니다.[17][18]Cython은 2007년에 Pyrex의 컴퓨터 대수 패키지 개발자들에 의해 Pyrex로부터 제안을 받았습니다. 왜냐하면 그들은 Pyrex의 한계에 만족하지 못했고 Pyrex의 유지 관리자인 Greg Ewing이 패치를 받아들일 수 없었기 때문입니다. 그들은 Pyrex의 도구에 대한 범위가 Sage 개발자들이 생각했던 것보다 훨씬 더 작은 것을 생각했습니다.그들은 Pyrex를 SageX로 분류했습니다.그들이 사람들이 단지 SageX를 얻기 위해 Sage를 다운로드하고 있었고, 다른 패키지의 개발자들(XML 라이브러리 LXML을 유지하는 Stefan Behnel을 포함) 또한 Pyrex의 포크를 유지하고 있었다는 것을 발견했을 때, SageX는 Sage 프로젝트에서 분리되어 합병되었습니다.cython-lxml사이톤이 되는 것.[19]

Cython 파일에는.pyx내선가장 기본적인 Cython 코드는 Python 코드와 꼭 닮았습니다.그러나 표준 Python은 동적으로 타이핑되지만 Cython에서는 옵션으로 타입을 제공하여 성능을 향상시킬 수 있으며 루프를 가능한 경우 C 루프로 변환할 수 있습니다.예를 들어,

#인수는 int 또는 raise A TypeError로 변환됩니다. de primes(intkmax): # 이 변수들은 C 유형으로 선언됩니다.cdefint n, k, i # 또 다른 C 타입 cdefint p[1000] # Python 타입 결과 = [] 만약 kmax > 1000: kmax = 1000k = 0 n = 2인 반면, k < kmax : i = 0인 반면 i < k  n % p[i] != 0: i == 만약 i = k: p[k] = n k = k + 1인 결과. append(n) n = n + 1 반환 결과

헬로 월드 인 사이튼

Cython의 샘플 hello world 프로그램은 Python C API와 인터페이스하기 때문에 대부분의 언어보다 더 복잡합니다.setuptools또는 기타 PEP517 준수 확장 건물 시설.기본 프로젝트에 필요한 파일은 최소 3개입니다.

  • A setup.py파일을 호출setuptools확장 모듈을 생성하는 빌드 프로세스
  • 확장 모듈을 로드하는 메인 파이썬 프로그램
  • Cython 소스 파일

다음 코드 목록은 빌드 및 시작 프로세스를 보여 줍니다.

# hello.pyx - Python module 이 코드는 Cython에 의해 C로 번역됩니다. 데프 say_hello():     활자로 찍어내다("헬로 월드!") 
# launch.py - Python stub loader, Cython이 만든 모듈을 로드합니다.  # 이 코드는 일반 파이썬처럼 항상 해석됩니다. # 이것은 C로 컴파일되지 않습니다.  수입품 안녕하세요. 안녕하세요..say_hello() 
# setup.py - 코드를 재배포하지 않을 경우 불필요, 아래 참조 부터 도구를 세우다 수입품 세우다 부터 Cython.Build 수입품 시토네이즈하다  세우다(이름. = "Hello world 앱",       ext_ = 시토네이즈하다("*.pyx")) 

다음 명령은 프로그램을 빌드하고 시작합니다.

$python setup.py build_ext --inplace $python launch.py

IPython/Jupyter 노트북에서 사용

Cython으로 시작하는 더 간단한 방법은 명령줄 IPython(또는 브라우저 내 파이썬 콘솔을 통해 주피터 노트북)을 통해 시작하는 것입니다.

 [1]: %load_ext 사이튼   [2]: %%사이톤    ...: 데프 f(n):    ...:     a = 0    ...:     위해서 i 인에 범위(n):    ...:         a += i    ...:     돌아가다 a    ...:     ...: cpdef g(인트 n):    ...:     cdef  a = 0    ...:     cdef 인트 i    ...:     위해서 i 인에 범위(n):    ...:         a += i    ...:     돌아가다 a    ...:    [3]: %시간을 재다 f(1000000) 10 고리들, 으뜸의  3: 26.5  인당의 고리   [4]: %시간을 재다 g(1000000) 1000 고리들, 으뜸의  3: 279 µs 인당의 고리 

순수 python 버전에 비해 95배 향상되었습니다.해당 주제에 대한 자세한 내용은 공식 퀵스타트 페이지에서 확인 가능합니다.[20]

사용하다

Python의 창시자 Guido van Rossum에 따르면, Cython은 Python의 과학적인 사용자들 사이에서 특히 인기가 있습니다.[12][21][22][23]특히 주의할 점:

Cython의 영역은 단지 수치 계산에만 국한되지 않습니다.예를 들어, lxml XML 툴킷은 대부분 Cython으로 작성되며, 이전 파이렉스와 마찬가지로 Cython은 메시징 라이브러리 ZeroMQ와 같은 많은 C와 C++ 라이브러리에 대한 Python 바인딩을 제공하는 데 사용됩니다.[28] Cython은 또한 멀티 코어 프로세서 머신을 위한 병렬 프로그램을 개발하는 데 사용될 수 있는데, 이 기능은 OpenMP 라이브러리를 사용합니다.

참고 항목

참고문헌

  1. ^ Behnel, Stefan (2008). "The Cython Compiler for C-Extensions in Python". EuroPython (28 July 2007: official Cython launch). Vilnius/Lietuva.
  2. ^ "Release 3.0.2". 27 August 2023. Retrieved 18 September 2023.
  3. ^ Cython Changelog, cython, 15 May 2023, retrieved 19 May 2023
  4. ^ "Language Basics — Cython 3.0.0a9 documentation". cython.readthedocs.io. Retrieved 9 September 2021.
  5. ^ "Cython - an overview — Cython 0.19.1 documentation". Docs.cython.org. Retrieved 21 July 2013.
  6. ^ Smith, Kurt (2015). Cython: A Guide for Python Programmers. O'Reilly Media. ISBN 978-1-4919-0155-7.
  7. ^ "FAQ · cython/cython Wiki". GitHub. Retrieved 11 January 2023.
  8. ^ "Cython Changelog". cython.org. Retrieved 21 July 2023.
  9. ^ "Basic Tutorial — Cython 3.0a6 documentation". cython.readthedocs.io. Retrieved 11 December 2020.
  10. ^ Oliphant, Travis (20 June 2011). "Technical Discovery: Speeding up Python (NumPy, Cython, and Weave)". Technicaldiscovery.blogspot.com. Retrieved 21 July 2013.
  11. ^ Behnel, Stefan; Bradshaw, Robert; Citro, Craig; Dalcin, Lisandro; Seljebotn, Dag Sverre; Smith, Kurt (2011). "Cython: The Best of Both Worlds". Computing in Science and Engineering. 13 (2): 31–39. Bibcode:2011CSE....13b..31B. doi:10.1109/MCSE.2010.118. S2CID 14292107.
  12. ^ a b Seljebot, Dag Sverre (2009). "Fast numerical computations with Cython". Proceedings of the 8th Python in Science Conference (SciPy 2009): 15–22.
  13. ^ Wilbers, I.; Langtangen, H. P.; Ødegård, Å. (2009). Skallerud, B.; Andersson, H. I. (eds.). "Using Cython to Speed up Numerical Python Programs" (PDF). Proceedings of MekIT'09: 495–512. Retrieved 14 June 2011.
  14. ^ "wrapper benchmarks for several Python wrapper generators (except Cython)". Archived from the original on 4 April 2015. Retrieved 28 May 2010.
  15. ^ "wrapper benchmarks for Cython, Boost.Python and PyBindGen". Archived from the original on 3 March 2016. Retrieved 28 May 2010.
  16. ^ "Cython: C-Extensions for Python". Retrieved 22 November 2015.
  17. ^ "Differences between Cython and Pyrex". GitHub.
  18. ^ Ewing, Greg (21 March 2011). "Re: VM and Language summit info for those not at Pycon (and those that are!)" (Message to the electronic mailing-list python-dev). Retrieved 5 May 2011.
  19. ^ Says Sage and Cython developer Robert Bradshaw at the Sage Days 29 conference (22 March 2011). "Cython: Past, Present and Future". Archived from the original on 21 December 2021. Retrieved 5 May 2011 – via YouTube.
  20. ^ "Building Cython code". cython.readthedocs.io. Retrieved 24 April 2017.
  21. ^ "inSCIght: The Scientific Computing Podcast" (Episode 6). Archived from the original on 10 October 2014. Retrieved 29 May 2011.
  22. ^ Millman, Jarrod; Aivazis, Michael (2011). "Python for Scientists and Engineers". Computing in Science and Engineering. 13 (2): 9–12. Bibcode:2011CSE....13b...9M. doi:10.1109/MCSE.2011.36.
  23. ^ Guido Van Rossum (21 March 2011). "Re: VM and Language summit info for those not at Pycon (and those that are!)" (Message to the electronic mailing-list python-dev). Retrieved 5 May 2011.
  24. ^ Erocal, Burcin; Stein, William (2010). "The Sage Project: Unifying Free Mathematical Software to Create a Viable Alternative to Magma, Maple, Mathematica and MATLAB". Mathematical Software – ICMS 2010 (PDF). pp. 12–27. CiteSeerX 10.1.1.172.624. doi:10.1007/978-3-642-15582-6_4. ISBN 978-3-642-15581-9. {{cite book}}: journal=무시됨(도움말)
  25. ^ "SciPy 0.7.2 release notes". Archived from the original on 4 March 2016. Retrieved 29 May 2011.
  26. ^ Pedregosa, Fabian; Varoquaux, Gaël; Gramfort, Alexandre; Michel, Vincent; Thirion, Bertrand; Grisel, Olivier; Blondel, Mathieu; Prettenhofer, Peter; Weiss, Ron; Dubourg, Vincent; Vanderplas, Jake; Passos, Alexandre; Cournapeau, David (2011). "Scikit-learn: Machine Learning in Python". Journal of Machine Learning Research. 12: 2825–2830. arXiv:1201.0490.
  27. ^ "Is Quora still running on PyPy?".
  28. ^ "ØMQ: Python binding".

외부 링크