반응형
소프트웨어 개발을 위해 파이썬을 선택한다는 것은 모든 프로그래밍 요구fmf 포괄하는 풍부한 패키지를 보유한 방대한 언어 생태계를 선택하는 것과 같다. 그러나 GUI 개발부터 머신 러닝에 이르기까지 온갖 분야를 위한 라이브러리 외에 선택할 수 있는 파이썬 런타임도 다양하다. 잘 살펴보면 이 중에서 당면한 사용 사례에 다른 런타임보다 더 적합한 런타임을 찾을 수 있을 것이다.
 
이 글에서는 표준 구현(C파이썬)부터 속도에 최적화된 버전(파이파이), 특수한 사용 사례를 위한 버전(아나콘다, 액티브파이썬), 다양한 언어 런타임을 위한 버전(자이썬, 아이언파이썬), 그리고 첨단 실험적 버전(파이카피, 메사파이)에 이르기까지 다양한 파이썬 배포판을 간략히 살펴본다.
 

C파이썬(CPython)

C파이썬은 파이썬의 참조 구현, 즉 다른 모든 파이썬 변형이 기준으로 삼는 표준 버전이다. C파이썬은 이름에서 짐작할 수 있듯이 C로 작성되며 파이썬 언어에 관한 최상위 의사 결정을 내리는 핵심 그룹에 의해 개발된다.

C파이썬 사용 사례
C파이썬은 파이썬의 참조 구현이므로 최적화 측면에서 가장 보수적이다. 설계 의도 자체가 그렇다. 파이썬의 핵심 관리 그룹이 정한 C파이썬의 목표는 가장 폭넓게 호환되고 표준화된 파이썬 구현이다.

파이썬 표준에 대한 호환성 및 부합성이 강력한 성능 및 기타 사항보다 중요하다면 C파이썬이 최선의 선택이다. C파이썬은 가장 기본이 되는 구현에서 파이썬을 다루고자 하는 전문가와 몇 가지 편의 기능을 포기할 의향이 있는 전문가에게도 유용하다.

예를 들어 C파이썬에서는 가상 환경을 설정하기 위한 작업이 조금 더 번거롭다. 다른 배포판(특히 아나콘다)은 작업 영역 설정과 관련하여 많은 부분을 자동화해서 제공한다.

C파이썬의 제약
C파이썬에서는 다른 파이썬 에디션과 같은 성능 최적화를 찾아볼 수 없다. 네이티브 JIT(Just-In-Time) 컴파일러도, 가속 수학 라이브러리도, 성능을 위한 써드파티 추가 기능도 없다. 모두 직접 추가할 수 있지만 기본적으로 포함되어 있지는 않다. 앞서도 말했지만 설계 의도 자체가 최대한의 호환성을 확보하고 참조 구현 역할을 하는 것이기 때문이다. 성능 최적화는 온전히 개발자 자신의 몫이다.
 
또한 C파이썬은 파이썬 작업을 위한 기초적인 툴 모음만 제공한다. 예를 들어 pip 패키지 매니저는 파이썬의 네이티브 파이파이(PyPI) 패키지 리포지토리에서 패키지를 설치한다. pip는 개발자가 제공한다면 사전 컴파일된 바이너리도 설치하지만(휠 배포 형식을 통해), 파이파이 외부의 패키지 종속성은 일절 설치하지 않는다.

IT에 완벽한 파이썬은 시스템 자동화부터 머신 러닝과 같은 최첨단 분야 작업에 이르기까지 많은 종류의 작업을 간소화한다. 
 

아나콘다 파이썬(Anaconda Python)

아니콘다(전 컨티넘 애널리틱스(Continuum Analytics))가 생산하는 아나콘다는 상용 업체가 뒷받침하고 기업 지원 서비스가 제공되는 배포판을 원하는 개발자를 대상으로 한다. 아나콘다 파이썬의 대표적인 사용 사례는 수학, 통계학, 공학, 데이터 분석, 머신 러닝 및 관련 애플리케이션이다.


아나콘다 파이썬 사용 사례
아나콘다에는 사이파이(SciPy), 넘파이(NumPy), 넘바(Numba) 등 상용 및 과학 분야 파이썬 작업에 가장 많이 사용되는 라이브러리가 상당수 포함돼 있으며 맞춤 패키지 관리 시스템을 통해 더 많은 라이브러리에 액세스할 수 있다.
 
아나콘다가 차별화되는 점은 이러한 모든 조각을 통합하는 방식이다. 아나콘다를 설치하면 아나콘다 환경의 모든 측면을 편리한 GUI를 통해 사용할 수 있게 해주는 데스크톱 앱인 아나콘다 네비게이터가 제공된다. 구성 요소를 찾고 최신 상태로 유지하고 작업하는 과정이 기본적으로 C파이썬에 비해 훨씬 더 쉽다.
 
또 다른 장점은 파이썬 생태계 외부의 구성 요소가 특정 패키지에 필요할 때 이러한 구성 요소를 다루는 방식이다. 아나콘다용으로 개발된 conda 패키지 매니저는 파이썬 패키지와 써드 파티 외부 소프트웨어 요구사항을 모두 설치할 수 있다,


아나콘다 파이썬의 제약
아나콘다에는 유용한 라이브러리가 상당히 많이 포함되어 있고 추가 라이브러리를 설치하기도 훨씬 더 간편하지만 그만큼 설치 용량은 C파이썬에 비해 훨씬 더 커질 수 있다. 기본 C파이썬 설치 용량은 약 100MB인데 반해 아나콘다 설치는 기가바이트 단위가 되기도 한다. 리소스가 제한적인 경우 문제가 될 수 있는 부분이다.
 
아나콘다의 점유 용량을 줄이는 방법 중 하나로, 아나콘다에서 군살을 빼고 실행에 반드시 필요한 요소만으로 구성된 미니콘다(Miniconda)가 있다. 미니콘다를 설치한 후 각 부분이 얼만큼의 용량을 소비하는지 면밀히 주시하면서 필요에 따라 패키지를 추가할 수 있다.
 

액티브파이썬(ActivePython)

액티브파이썬은 아나콘다와 마찬가지로 이윤을 추구하는 기업(액티브스테이트(ActiveState))에 의해 개발 및 유지되는 런타임이다. 액티브스테이트는 여러 가지 언어 런타임과 다중 언어 코모도(Komodo) IDE를 판매하는 기업이다.


액티브파이썬 사용 사례
액티브파이썬은 기업 사용자와 데이터 과학자, 즉 파이썬을 사용하고자 하지만 파이썬 설치를 조합하고 관리하느라 애쓰고 싶지는 않은 사람들을 대상으로 한다. 액티브파이썬은 파이썬의 pip 패키지 매니저를 사용하지만 수백 가지의 일반적인 라이브러리를 검증된 팩인(pack-in)으로 제공하며, 인텔 매스 커널 라이브러리(Intel Math Kernel Library) 등의 써드 파티 종속성과 함께 일부 공통 라이브러리도 제공한다.


액티브파이썬의 제약
외부 종속성을 사용한 액티브파이썬의 패키지 처리 방식에는 한 가지 잠재적 단점이 있다. 예를 들어 텐서플로우와 같이 종속성이 복잡한 프로젝트를 새 버전으로 업그레이드하려면 액티브파이썬 설치도 함께 업그레이드해야 한다는 점이다. 개발 작업이 특정 프로젝트 버전과 대체로 연계되는 환경에서는 큰 문제가 되지 않지만 개발 작업이 최첨단 버전을 추종하는 경향이 있는 환경에서는 문제가 될 수 있다.
 

파이파이(PyPy)

C파이썬 인터프리터를 대체하는 파이파이는 JIT(Just-In-Time) 컴파일을 사용해서 파이썬 프로그램의 실행 속도를 높인다. 수행하는 작업에 따라 큰 폭의 성능 향상이 가능하다.


파이파이 사용 사례
파이썬, 특히 C파이썬에 대한 대표적인 불만은 속도다. 기본적으로 파이썬의 실행 속도는 C에 비해 훨씬 느리고, 경우에 따라 수백 배 더 느린 경우도 있다. 파이파이 JIT는 파이썬 코드를 기계어로 컴파일해서 C파이썬에 비해 평균 7.7배 더 높은 속도를 제공한다. 일부 작업에서는 50배 더 빠른 속도를 내기도 한다.
 
무엇보다 좋은 점은 이러한 속도 향상을 얻기 위해 개발자가 따로 해야 할 일은 거의 없거나 아예 없다는 것이다. C파이썬을 파이파이로 바꾸기만 하면 그 외에는 별다른 작업이 필요 없다.

파이파이의 제약
파이파이는 항상 “순수한” 파이썬 애플리케이션에서 가장 좋은 성능을 제공한다. 파이파이가 C파이썬의 네이티브 바이너리 인터페이스를 에뮬레이션하는 방식상 예전에는 넘파이와 같이 C 라이브러리를 다루는 파이썬 패키지에서는 그만큼 좋은 성능을 얻을 수 없었다. 그러나 파이파이 개발진은 이 문제를 오랜 기간에 걸쳐 조금씩 해결했고, 이제 파이파이는 C 확장에 의존하는 대다수 파이썬 패키지와 잘 호환된다. 요약하자면, C 확장에 대한 지원은 여전히 제한적이지만 예전에 비하면 훨씬 개선됐다. 
 
파이파이의 또 다른 잠재적 단점은 런타임의 크기다. 윈도우의 코어 C파이썬 런타임 크기는 표준 라이브러리를 제외하고 약 4MB이지만 파이파이 런타임은 약 32MB다. 또한 파이파이는 전통적으로 파이썬의 2.x 분기에 집중해왔다는 점도 감안해야 한다. 예를 들어 파이썬 3.x용 파이파이는 현재 윈도우용으로는 32비트 베타 테스트 버전만 제공된다. (리눅스와 맥OS의 경우 파이썬 2.x와 3.x용으로 64비트 버전 파이파이가 제공됨)
 

자이썬(Jython)

JVM(자바 가상 머신)은 자이썬 프로젝트를 통해 그루비, 스칼라, 클로저, 코틀린, 그리고 파이썬에 이르기까지, 자바 외의 많은 언어에서 런타임 역할을 한다.

자이썬 사용 사례
자이썬은 파이썬 2.x 코드를 JVM 바이트코드로 컴파일해서 그 결과 프로그램을 JVM에서 실행한다. 자이썬으로 컴파일된 프로그램은 C파이썬 버전에 비해 더 빠른 경우도 있지만 항상 그렇지는 않다.
 
자이썬이 제공하는 가장 큰 장점은 자바 생태계와의 직접적인 상호운용성이다. 자바는 파이썬보다도 더 광범위하게 사용된다. 파이썬 개발자는 JVM에서 파이썬을 실행함으로써 다른 방법으로는 얻을 수 없는 방대한 라이브러리 및 프레임워크 생태계를 이용할 수 있다. 마찬가지 맥락에서 자이썬은 자바 개발자가 파이썬 라이브러리를 사용하도록 허용한다.

자이썬의 제약
자이썬의 가장 큰 단점은 파이썬 2.x 분기만 지원한다는 것이다. 파이썬 3.x 지원은 현재 개발 중이지만 진행은 지지부진한 모습이다. 지금까지 출시된 것은 아무것도 없다.
 
또한 자이썬은 JVM에서 파이썬을 사용할 수 있게 해주지만 안드로이드에서 파이썬을 사용할 수는 없다는 점도 참고해야 한다. 현재 제대로 된 안드로이드용 자이썬 이식 버전은 없으므로 안드로이드 애플리케이션 개발에는 자이썬을 사용할 수 없다.
 

아이언파이썬(IronPython)

자이썬이 JVM에서의 파이썬 구현이라면 아이언파이썬은 닷넷 런타임 또는 CLR(공통 언어 런타임)에서의 파이썬 구현이다. 아이언파이썬은 CLR의 DLR(동적 언어 런타임)을 사용해서 C파이썬과 같은 수준의 동적 특성으로 파이썬 프로그램을 실행할 수 있게 해준다.

아이언파이썬 사용 사례
아이언파이썬은 자이썬과 마찬가지로 브리지다. 대표적인 사용 사례는 파이썬과 닷넷 환경 간의 상호운용성이다. 파이썬의 네이티브 가져오기 및 객체 조작 구문을 사용해서 기존 닷넷 어셈블리를 아이언파이썬 프로그램에 로드할 수 있다. 또한 아이언파이썬 코드를 어셈블리로 컴파일해서 그대로 실행하거나 다른 언어에서 호출할 수도 있다. 그러나 어셈블리의 MSIL(마이크로소프트 중간 언어)은 공통 언어 사양에 부합하지 않으므로 다른 닷넷 언어에서 직접 액세스할 수 없다.

아이언파이썬의 제약
아이언파이썬은 자이썬과 마찬가지로 현재 파이썬 2.x만 지원한다. 단, 아이언파이썬 3.x 구현을 위한 개발 작업이 진행 중이다.
 

윈파이썬(WinPython)

이름에서 짐작할 수 있겠지만 윈파이썬은 마이크로소프트 윈도우 사용자를 위해 만들어진 파이썬 배포판이다. C파이썬의 윈도우용 초기 에디션은 제대로 설계되지 않은 탓에 윈도우 사용자가 파이썬 생태계를 완전히 활용하기가 어려웠다. C파이썬의 윈도우 에디션은 꾸준히 개선됐지만 여전히 윈파이썬이 C파이썬에 비해 더 다양한 기능을 제공한다.


윈파이썬 사용 사례
윈파이썬의 대표적인 장점은 완전한 독립형 파이썬 에디션이라는 점이다. 실행되는 시스템에 설치할 필요 없이 디렉터리에 압축을 풀기만 하면 된다. 따라서 시스템에 소프트웨어를 설치할 수 없는 경우, 사전 구성된 파이썬 런타임을 이 런타임에서 실행되는 애플리케이션과 함께 배포해야 하는 경우, 또는 여러 파이썬 에디션을 상호 간섭 없이 함께 실행해야 하는 경우에 유용하다.
 
윈파이썬에는 넘파이, 판다스(Pandas), 사이파이, Matplotlib 등 데이터 과학을 위한 다양한 패키지도 함께 제공되므로 추가 설치 단계 없이 즉시 사용할 수 있다. 윈도우 시스템에 포함되지 않는 경우가 많지만 다양한 파이썬 확장 기능에서 필요하거나 활용할 수 있는 C/C++ 컴파일러도 포함돼 있다.

윈파이썬의 제약
윈파이썬의 한 가지 제약은 일부 사용 사례에서는 기본적으로 포함된 요소가 너무 많을 수 있다는 점이다. 이 문제를 개선하기 위해 윈파이썬 개발진은 각 윈파이썬 에디션의 “제로” 버전을 제공한다. 제로 버전에는 가능한 최소한의 설치 항목만 포함된다. 파이썬의 자체 pip 툴이나 윈파이썬의 WPPM 유틸리티를 사용해서 나중에 필요한 패키지를 추가할 수 있다.
 

파이썬 포터블(Python Portable)

파이썬 포터블은 자체 실행 패키지 형태의 C파이썬 런타임이다. 이 런타임은 비슷한 자체 실행 형태의 애플리케이션 모음인 포터블데브앱스(PortableDevApps)가 제공한다.

파이썬 포터블 사용 사례
파이썬 포터블에는 윈파이썬과 마찬가지로 과학 컴퓨팅을 위한 Matplotlib, 넘바, 심파이(SymPy), 사이파이, 사이썬을 비롯한 다양한 패키지가 포함된다. 또한 윈파이썬과 마찬가지로 실행을 위해 윈도우 호스트에 정식으로 설치할 필요가 없다. 아무 디렉터리 또는 이동식 드라이브에 있으면 된다. 스파이더(Spyder) IDE와 파이썬의 pip 패키지 매니저도 포함되므로 필요에 따라 패키지를 추가, 변경, 제거할 수 있다.

파이썬 포터블의 제약
윈파이썬과 달리 C/C++ 컴파일러가 포함되지 않는다. 따라서 사이썬으로 작성된 코드를 활용하고 C로 컴파일하려면 C 컴파일러를 제공해야 한다.
 

실험적 파이썬 배포판

아래 배포판은 완전히 새로운 프로젝트를 위한 시작 지점으로 파이썬을 사용하거나 표준 파이썬에 대해 전략적 수준의 변화를 가하므로 기본 파이썬을 상당 부분 변경한다. 대체로 아직 프로덕션 용도로는 권장되지 않는다.

마이크로파이썬(MicroPython)
마이크로파이썬은 마이크로컨트롤러와 같은 극단적인 로우엔드 하드웨어에서 실행이 가능한 파이썬 언어의 최소 하위집합을 제공한다. 마이크로파이썬은 파이썬 3.4를 구현하지만 몇 가지 차이점이 있다. 파이썬을 안다면 마이크로파이썬 코드를 쉽게 쓸 수 있지만 기존 코드를 변경 없이 그대로 실행할 수 없는 경우도 있다.

파이카피(Pycopy)
파이카피 개발진은 “제약이 많은 시스템과 마이크로컨트롤러를 비롯해 모든 것을 위한, 미니멀리즘을 추구하며 메모리 효율성이 높은 파이썬 구현”이라고 설명한다. 파이카피는 마이크로파이썬 프로젝트를 기반으로 하지만 목표는 다르다. 무엇보다 파이썬 생태계와의 폭넓은 호환성을 염두에 둔다. 이를 위해 예를 들어 특정 기능에 대해 지원하거나 하지 않는 양자택일이 아니라 모듈 방식을 통해 사용자가 필요한 호환성 수준을 덧붙일 수 있도록 한다.

러스트파이썬(RustPython)
C로 작성된 기본 파이썬 런타임은 C 언어에 의해 노출되는 여러 함정을 최소화하는 고품질 코드다. 러스트파이썬 프로젝트는 러스트 언어로, 러스트의 메모리 안전성과 속도를 활용해 파이썬 런타임을 구현한다. 지금은 파이썬 구문의 하위 집합만 지원하지만 꾸준히 개선되고 있다. 브라우저에서 라이브 데모를 사용해볼 수도 있다.

메사파이(MesaPy)
대부분의 파이썬 파생물은 C파이썬을 기반으로 한다. 메사파이는 C파이썬 대신 보안과 메모리 안정성을 강조하는 파이썬을 만드는 데 더 적합한 파이파이 런타임을 사용한다. 파이파이의 내부에는 부가적인 보안 강화가 적용된다. 나머지 C 소스 코드는 공식 검증 툴로 검증되며 런타임은 부가적인 계산 보안을 위해 인텔 SGX 신뢰 실행 환경을 사용한다. 또한 일반적으로 C로 작성되는 외부 라이브러리가 대신 러스트로 작성된다. 메사파이는 파이썬 대비 파이파이의 속도 향상을 측정하는 데 사용되는 벤치마크 모음을 실행할 수 있으므로 현재 파이파이 자체만큼 파이썬과 호환된다.

원문보기:
http://www.itworld.co.kr/news/132322#csidxa2b0d1478632fe2a342e66bca7cb694
반응형

+ Recent posts