자세히 보기

‘필요에 맞춰 골라 쓴다’ 파이썬 배포판10종 라운드업

속도, 안정성, 휴대성, 작은 풋프린트, 데이터 기능성 등에서 무엇이 필요하든, 다음의 파이썬 배포판 중 하나가 해답일 수 있다.

소프트웨어 개발에 있어 파이썬을 선택하면 프로그래밍 요구사항을 충족할 수 있는 다양한 패키지가 있는 대규모 언어 생태계에 진입할 수 있다. 특히 GUI 개발부터 머신러닝에 이르는 각종 라이브러리 외에도 여러 개의 파이썬 런타임 중에서 선택할 수 있다. 각각의  런타임들은 각자의 매력을 가지고 있다. 

표준 구현인 C파이썬(CPython)부터 속도에 최적화된 버전인 파이파이(PyPy), 특수 사용 사례인 아나콘다 및 액티브파이썬(Anaconda, ActivePython), 실험적 사용 사례인 마이크로파이썬 및 러스트파이썬(MicroPython, RustPython)에 이르기까지 파이썬 배포판 10종에 대한 간략한 설명을 정리했다.

C파이썬
C파이썬(CPython)은 다른 모든 파이썬이 참조하는 표준 버전인 파이썬 참조 구현체(Python reference implementation)다. C파이썬은 이름이 보여주듯 C로 작성되며, 파이썬 언어에 대한 최상위 결정을 담당하는 동일 핵심 그룹에 의해 생성된다. 

C파이썬의 사용 사례
C파이썬은 파이썬의 참조 구현체이기에, 최적화 측면에서 특히 보수적인 런타임의 성격을 가져왔다. 파이썬의 유지 관리자들은 C파이썬이 가장 광범위하게 호환되고 표준화된 파이썬 구현체가 되기를 희망한다. 그러나 지난 몇 건의 개정이 이루어지는 동안 개발팀은 호환성을 희생시키지 않으면서도 파이썬을 일반적으로 더 빠르게 만들 수 있도록 설계된 최적화를 도입했다. 

C파이썬은 파이썬 표준과의 호환성 및 적합성이 중요할 경우 가장 좋은 선택지다. 파이썬의 가장 근본적인 인카네이션(incarnation)으로 작업을 원하고, 특정 편의성을 포기할 의향이 있는 전문가에게 유용하다. 예를 들어, C파이썬의 경우 가상 환경 설정을 위해 리프팅(lifting)을 조금 더 수행해야 한다. 참고로 기타 배포판(특히 아나콘다)은 작업 공간 설정을 중심으로 더 많은 자동화를 제공한다. 

C파이썬의 한계
C파이썬은 다른 버전의 파이썬에서 볼 수 있는 성능 최적화 기능을 거의 갖추고 있지 않다. 또한 기본 JIT(just-in-time) 컴파일러, 가속화된 수학 라이브러리, 성능을 위한 써드파티 추가 기능도 없다. 이러한 것들을 모두 추가할 수 있기는 하지만 번들로 제공되지는 않는다. 다시 말하지만, 이는 최대 호환성을 보장하고 C파이썬이 참조 구현체 역할을 할 수 있도록 하기 위해서다. 그러나 이는 성능 최적화는 개발자에게 달려있음을 의미한다. 

또한 C파이썬은 파이썬과 함께 작업하기 위한 기본 도구 셋만 제공한다. 예를 들어, Pip 패키지 관리자의 경우, 파이썬의 네이티브 PyPI 패키지 저장소에서 패키지를 가져와 설치한다. Pip는 사전 컴파일 된 바이너리를 제공하는 경우 이를 설치할 것이다. 그러나 패키지가 PyPI 외부에서 가질 수 있는 종속성은 설치하지 않는다. 

아나콘다 파이썬
아나콘다 Inc(Anaconda Inc ; 이전에는 컨티늄 애널리틱스(Continuum Analytics)였다)가 만든 아나콘다는 기업 지원 계획이 있는 배포판이 필요한 파이썬 개발자를 위해 설계됐다. 아나콘다 파이썬의 주요 사용 사례는 수학, 통계, 엔지니어링, 데이터 분석, 머신러닝 및 관련 애플리케이션이다. 

아나콘다 파이썬의 사용 사례
아나콘다는 상용 및 과학용 파이썬 작업에 사용되는 일반적인 라이브러리인 싸이파이(SciPy), 넘파이(NumPy), 넘바(Numba) 등을 번들로 제공한다. 또한 맞춤형 패키지 관리 시스템을 통해 더 많은 라이브러리에 액세스할 수 있도록 지원한다. 

아나콘다의 경우, 이 모든 조각들을 통합하는 방식 측면에서 특별하다. 아나콘다가 설치되면 편리한 GUI를 통해 아나콘다 환경의 모든 부분을 활용할 수 있는 아나콘다 내비게이터(Anaconda Navigator)라는 데스크톱 앱을 이용할 수 있다. 아나콘다를 통해 구성 요소를 찾고, 이러한 요소의 최신 상태를 유지하며, 이와 함께 작업하면 C파이썬을 이용할 때보다 한결 더 수월하다. 

또 다른 장점은 아나콘다가 특정 패키지에 필요한 경우 파이썬 생태계 외부에서 컴포넌트를 처리하는 방식이다. 아나콘다를 위해 특별히 제작된 콘다 패키지 매니저(conda package manager)는 파이썬 패키지 설치 및 써드파티 외부 소프트웨어 요구사항 모두를 처리한다. 

아나콘다 파이썬의 한계
아나콘다는 유용한 라이브러리를 상당히 많이 포함하고 있으며, 단 몇 번의 키 입력만으로 다양한 요소를 설치할 수 있다. 이로 이해 아나콘다의 설치 용량은 파이썬 보다 훨씬 클 수 있다. 기본 C파이썬 설치는 약 100MB을 실행하나 아나콘다의 설치 용량은 기가바이트까지 커질 수 있다. 이러한 속성은 리소스 제약이 있는 상황에서 문제가 될 수 있다. 

아나콘다의 설치 용량을 줄이는 한 가지 방법은 실행 및 실행에 필요한 최소 조각만을 포함하는 아나콘다의 축소버전 미니콘다(Miniconda)를 설치하는 것이다. 이를 통해 각 조각이 어느 정도의 공간을 사용하는 지를 고려해 적합한 수준으로 미니콘다에 패키지를 추가할 수 있다. 

액티브스테이트 파이썬 
아나콘다와 같이 액티브스테이트 파이썬(ActiveState Python)은 액티브스테이트라는 기업이 개발 및 유지관리하는 배포판이다. 액티브스테이트는 다국어 코모도 IDE(Komodo IDE)와 함께 여러 언어 런타임을 판매하기도 한다.

액티브스테이트 파이썬의 사용 사례
액티브스테이트 파이썬은 기업 사용자 및 데이터 과학자(파이썬 사용을 원하나 파이썬 설치, 조립 및 관리에 많은 품을 들이고 싶지 않은 사용자)를 대상으로 한다. 액티브스테이트의 경우, 파이썬의 일반적인 pip 패키지 관리자를 사용하나, 몇 백 개의 공통 라이브러리를 검증된 팩인(pack-ins)으로 제공하며 이와 더불어 인텔 매스 커널 라이브러리(Intel Math Kernel Library)와 같은 써드파티 종속성이 있는 일부 일반 라이브러리 또한 제공한다. 

액티브스테이트 파이썬의 한계 
외부 종속성이 있는 패키지를 다루는 액티브스테이트의 접근방식에는 잠재적인 단점이 있다. 종속성이 복잡한 프로젝트의 최신 버전(예를 들어 텐서플로우)으로 업그레이드할 경우, 액티브스테이트 파이썬 설치 또한 업그레이드해야 한다. 개발이 특정 버전의 프로젝트와 연결되는 경향이 있는 환경에서는 그다지 문제가 되지 않지만 최신 버전의 개발 트랙이 있는 환경에서는 문제가 될 수 있다. 

또한 액티브스테이트 파이썬 버전은 최신 버전의 C파이썬 버전보다 뒤쳐지는 경향이 있다. 예를 들어, 이 글을 작성하는 시점을 기준으로 파이썬의 최신 지원 버전은 3.12이지만 액티브스테이트는 3.10만을 제공한다. 

파이파이
C파이썬 인터프리터를 위한 드롭인(drop-in) 대체품인 파이파이(PyPy)는 JIT 컴파일을 활용해 파이썬 프로그램의 실행 속도를 높인다. 작업에 따라 성능이 크게 개선될 수 있다. 

파이파이의 사용 사례
일반적으로 파이썬과 특히 C파이썬에 대한 흔한 불만은 속도다. 기본적으로 파이썬은 C보다 몇 배 더 느리게, 때로는 수백 배 더 느리게 실행된다. 파이파이 JIT는 파이썬 코드를 기계어로 컴파일해 C파이썬보다 평균적으로 4.8배 더 빠른 속도를 제공한다. 어떤 작업의 경우 50배나 더 빨리 실행된다. 

특히 반가운 점은 개발자가 이러한 혜택을 위해 노력할 필요가 거의 없다는 것이다. C파이썬을 파이파이로 교체하면 대부분의 경우 작업이 완료된다. 또한 윈도우, 센트OS(CentOS) 7 호환 리눅스(Arm64 및 인텔 모두), 맥OS(Arm64 및 인텔 모두) 등 주요 플랫폼 모두 64비트 버전에서 지원된다. 

파이파이의 한계
파이파이는 ‘순수한(pure)’ 파이썬 애플리케이션에서 뛰어난 성능을 보여왔다. 단 넘파이(NumPy)와 같이 C 라이브러리와 인터페이스하는 파이썬 패키지들은 좋은 성능을 보여주지 못했다. 파이파이가 C파이썬의 네이티브 바이너리 인터페이스를 에뮬레이트 하는 방식으로 인해서였다. 그러나 시간이 경과함에 따라 파이파이의 개발자들은 이러한 문제를 조금씩 줄여 C확장에 의존하는 대부분의 파이썬 패키지 및 파이파이가 훨씬 더 잘 호환되도록 만들었다. 즉, C확장에 대한 지원은 여전히 제한적이나 예전보다는 낫다. 

파이파이의 또 다른 단점은 런타임의 크기다. 표준 라이브러리를 제외한 윈도우의 핵심 C파이썬 런타임은 약 6MB인 반면 파이파이의 런타임은 약 43MB다. 

자이썬
자바 가상머신(JVM, Java virtual machine)은 자바 외에도 상당히 많은 언어의 런타임 역할을 한다. 자이썬 프로젝트를 통해서다. 코루틴(Kotlin), 그루비(Groovy), 스칼라(Scala), 클로저(Clojure), 파이썬 등의 언어가 이에 해당된다.

자이썬의 사용 사례
자이썬은 파이썬 2.x 바이트 코드에 컴파일하고 결과 프로그램을 JVM에서 실행한다. 어떤 경우에는 자이썬 컴파일 된 프로그램이 C파이썬 프로그램보다 더 신속히 실행되나 늘 그런 것은 아니다. 

자이썬이 제공하는 큰 장점은 나머지 자바 생태계와의 직접적인 상호운용성이다. JVM에서 파이썬 실행 시 파이썬 개발자들은 이 경우가 아니라면 사용할 수 없었을 방대한 라이브러리 및 프레임워크 생태계를 활용할 수 있다. 마찬가지로 자이썬은 자바 개발자들이 파이썬 라이브러리를 활용할 수 있도록 한다. 

자이썬의 한계
자이썬의 최대 단점은 파이썬의 2.x 브랜치만을 지원한다는 점이다. 파이썬 3.x을 위한 지원은 개발 중이나 아직까지 출시된 것은 없다. 

또한 자이썬이 파이썬을 JVM애 가져오기는 하지만 파이썬을 안드로이드에 가져오지는 않는다. 현재 안드로이드에 적합한 자이썬 포트가 없으므로 자이썬을 안드로이드 애플리케이션 개발에 활용할 수 없다. 

아이언파이썬
자이썬이 JVM에서 파이썬을 구현했듯이 아이언파이썬은 닷넷(.Net) 런타임, 즉 공통언어 런타임(CLR, Common Language Runtime)에서 파이썬을 구현한다. 아이언파이썬은 CLR의 동적언어 런타임(DLR, Dynamic Language Runtime)을 사용해 파이썬 프로그램이 C파이썬에서 수행하는 것과 같은 정도의 동적으로 실행되도록 한다. 

아이언파이썬의 사용 사례
자이썬과 마찬가지로 아이언파이썬 또한 교량의 역할을 한다. 주요 사용 사례로는 파이썬과 닷넷 유니버스(.Net universe) 간의 상호 운용성이다. 기존 닷넷 어셈블리는 파이썬의 네이티브 가져오기 및 객체 조작 구문을 활용해 아이언파이썬 프로그램에 로드 할 수 있다. 아이언파이썬 코드를 어셈블리로 컴파일 해 그대로 실행하거나 다른 언어에서 호출할 수 있다. 그러나 어셈블리의 MSIL(MSIL (Microsoft Intermediate Language)은 공통언어 사양(Common Language Specification)을 준수하지 않으므로 기타 닷넷 언어에서 직접 액세스할 수 없다. 

아이언파이썬의 한계
아이언파이썬은 파이썬 2.7과 파이썬 3을 지원하는데 그친다. 참고로 파이썬 3의 최신 버전은 파이썬 3.4다. 3.4버전이 한동안 지원되지 않았기 때문에 이는 기존 파이썬 에코시스템에서 사용할 수 있는 여지를 제한한다. 

윈파이썬
이름이 보여주듯 윈파이썬(WinPython)은 마이크로소프트 윈도우 사용자를 위해 특별히 만들어진 파이썬 배포판이다. C파이썬의 윈도우용 초기 버전은 잘 설계되지 않았고 윈도우 사용자들은 파이썬 생태계를 최대한 활용하기 어려웠다. C파이썬의 윈도우 버전은 시간이 경과함에 따라 개선되었으나 윈파이썬은 여전히 C파이썬에서 찾을 수 없는 많은 것들을 제공한다. 

윈파이썬의 사용 사례
윈파이썬의 큰 매력은 파이썬의 독립형 버전(self-contained)이라는 점이다. 실행되는 시스템에 설치할 필요가 없으며 디렉토리에 압축을 풀기만 하면 된다. 이로 인해 특정 시스템에 소프트웨어를 설치할 수 없는 경우, 파이썬은 사전 구성된 파이썬 런타임을 실행할 애플리케이션과 함께 배포해야 하는 경우, 또는 여러 버전의 파이썬이 서로 간섭하지 않고 나란히 실행되어야 하는 경우 윈파이썬의 유용성이 빛을 발한다.

C파이썬 자체는 ‘임베드가 가능한 재배포(embeddable redistribution)’라고 불리는 언팩-앤런(unpack-and-run) 포맷으로 제공되는데, 이는 극히 일부의 보완 패키지와 함께 배포된다. 이와는 달리 윈파이썬의 경우 넘파이, 판다스(Pandas), 싸이파이(SciPy), 맷플롯리브(Matplotlib) 등 수많은 데이터 과학 지향 패키지를 번들로 제공하므로 추가 설치 단계 없이도 즉각 사용이 가능하다. 또한 C/C++ 컴파일러 또한 포함되어 있는데, 이는 많은 윈도우 시스템이 이를 포함하고 있지 않고 많은 파이썬 확장 버전이 이를 필요로 하거나 활용할 수 있기 때문이다. 

윈파이썬의 한계
윈파이썬의 한 가지 한계는 사용 사례의에 따라 디폴트로 너무 많은 것을 포함할 수 있다는 점이다. 이를 해결하기 위해 윈파이썬의 개발자들은 제품 설치를 최소화한 윈파이썬 버전을 포함하는 각 윈파이썬 에디션의 ‘제로(zero)’ 버전을 제공한다. 파이썬의 자체 pip 도구 혹은 윈파이썬의 WPPM 유틸리티를 활용해 향후 더 많은 패키지를 추가할 수 있다. 

파이썬 포터블
파이썬 포터블(Python Portable)은 독립형 패키지의 C파이썬 런타임으로, 유사한 독립형 애플리케이션으로 구성된 포터블데브앱스(PortableDevApps) 컬렉션에서 제공된다. 

파이썬 포터블의 사용 사례
윈파이썬과 마찬가지로 파이썬 포터블에도 맷플롯리브, 넘바, 심파이, 사이썬과 같은 과학 컴퓨팅을 위한 수많은 패키지를 포함한다. 윈파이썬과 유사하게 파이썬 포터블 또한 윈도우 호스트에 정식으로 설치할 필요 없이 실행된다. 또한 모든 디렉토리 혹은 이동식 드라이브에 저장할 수 있다. 뿐만 아니라 스파이더 IDE(Spyder IDE) 및 파이썬의 pip 패키지 관리자를 포함하므로 필요에 따라 패키지를 추가, 변경 및 제거할 수 있다. 

파이썬 포터블의 한계
윈파이썬과는 달리 파이썬 포터블은 C/C++ 컴파일러를 포함하지 않는다. 사이썬으로 작성된 코드를 활용하려면 C 컴파일러를 제공해야 한다. 또한 이 배포판에서 제공되는 파이썬의 최신 버전은 3.9다. 

실험적 파이썬 배포판 2종
다음의 배포판은 파이썬을 완전히 새로운 시작점으로 사용하거나 표준 파이썬에 전략적인 변화를 주므로 파이썬에 상당한 변화를 가져온다. 이러한 파이썬들의 경우, 현장 용도로는 권장되지 않는다. 

만약 당분간 파이썬 2.x 코드 베이스를 사용할 예정인 경우라면 파이썬 2.x를 유지하는 실험적인 파이썬 배포판에 대한 기사를 확인하도록 한다.

마이크로파이썬
마이크로파이썬(MicroPython)은 마이크로컨트롤러와 같은 상당히 저사양인 하드웨어에서 실행될 수 있는 파이썬 언어의 최소 하위 집합을 제공한다. 마이크로파이썬의 경우, 파이썬 3.4를 구현하나 몇 가지 차이점이 있다. 파이썬을 알면 마이크로파이썬 코드를 작성하기 수월하나 기존 코드가 그대로 실행되지 않을 수 있다. 

러스트파이썬
C로 작성된 디폴트 파이썬 런타임은 많은 계정에서 C언어로 노출되는 부비 트랩 수를 최소화하는 고품질 코드로 평가받는다. 러스트파이썬(RustPython) 프로젝트의 경우, 러스트의 메모리 안정성 및 속도를 활용해 러스트 언어로 파이썬 런타임을 구현한다. 현재는 파이썬 구문의 일부만 지원하나 꾸준히 발전하고 있다. 브라우저에서 라이브 데모 또한 시도할 수 있다. dl-ciokorea@foundryco.com