사용자 도구

사이트 도구


project:embeddedpython

문서의 이전 판입니다!


Embedded Python 시작하기

소개

파이썬은 참 매력적인 언어입니다. 리스트, 튜플, 딕셔너리 같은 자료형들이 기본적으로 제공되고, 풍부한 라이브러리는 물론 쓰기도 편리합니다. 그리고 다른 언어와도 잘 어울립니다. 흔히 이를 일컬어 '풀 언어 (glue language)'라고 하죠.

/* 사실 저는 그동안 '풍부한 자료형'과 '쉽고 강력한 라이브러리'의 덕을 충분히 보아 오긴 했습니다만, 아직 다른 언어와의 교착(binding)이란 면에서 직접적으로는 큰 인상을 받지 못했습니다. 물론 간접적으로 알게 모르게 상당히 큰 혜택을 받아오긴 했었다는 사실을 알고 있지만요. 예를 들어 보통 GTK, wxWidget 등의 GUI 라이브러리들을 파이썬에서 사용할 때는 wxPython 등의 파이썬 패키지를 사용하는데, 이런 패키지들은 C/C++로 작성된 라이브러리들을 바인딩하고 있죠. 몇몇 파이썬 표준 라이브러리들도 이런 형태를 취하고 있는 것으로 알고 있습니다. */

파이썬은 C/C++에 비해 수행 속도가 느립니다. 대신 매우 생산성이 높습니다. 그러니 둘 사이를 잘 절충하여 좋은 구현을 만들어 보자는 것이 핵심이겠죠. 이는 두 가지로 방법으로 이해해볼 수 있습니다.

  • 파이썬 기반 프로그램을에서, 빠른 처리가 필요한 부분을 C/C++로 만든다. 파이썬에서 C/C++ 코드를 쓴다.
  • C/C++ 기반 프로그램에서, 유연한 처리가 필요한 부분을 파이썬으로 만든다. C/C++에서 파이썬 코드를 쓴다.

Extending vs. Embedding

문서나 웹을 검색해보면 'extending/extended'와 'embedding/embedded'라는 표현이 상당히 자주 보입니다. 우선 이 extending, embedding이란 단어가 무얼 뜻하는지 짚고 넘어가겠습니다.

Extending

파이썬에서 extending, 즉 '확장'했다는 말은 파이썬 측에서 다른 언어를 바인딩하여 다른 언어가 제공하는 기능을 활용하는 것입니다. 파이썬에서 C/C++ 코드를 쓰는 것은 이 예입니다.

Embedding

Extending의 반대입니다. 파이썬이 다른 코드에 '삽입'되었다는 뜻이며 C/C++에서 파이썬 코드를 쓴다는 것은 이 쪽의 예입니다. 본 문서에서는 'embedded python'을 '삽입된 파이썬'으로 번역해 쓰겠습니다. Extending은 차후에 기회가 된다면 따로 다룰 생각이며, 본 문서에서는 삽입된 파이썬에 대해서만 다룹니다.

파이썬을 삽입하는 주체가 되는 언어는 C/C++로 한정하겠습니다. 사실 C 이외에 여러 다양한 언어가 파이썬과의 통합을 지원합니다. 심지어 같은 스크립트 언어인 Perl과도 가능합니다. 가능한 언어의 종류는 파이썬 위키를 참고하세요.

파이썬 삽입을 하게 되면 다음과 같은 장점을 가집니다.

  • 파이썬 및 파이썬의 라이브러리들을 활용할 수 있습니다. 유연하고 자유분방한 파이썬을 이용해 빠르게 모듈을 생성합니다. '배터리 포함'된 파이썬 라이브러리를 사용하는 것도 꽤 멋집니다.
  • 핵심 모듈을 매번 컴파일할 필요가 없습니다. 컴파일할 필요도 없을 뿐더러 모듈만 따로 파이썬 인터프리터를 통해 간편하게 테스트할 수 있습니다. 모듈 변경에 있어 상당히 유연해집니다.

그러나 다음과 같은 사항은 꼭 고려해 보셔야 합니다.

  • 암만 해도 파이썬이 C/C++ 속도를 능가할 수는 없습니다. 설마 속도가 중요한 부분을 파이썬으로 구현하려는 것은 아니겠지만요.
  • C/C++ 쪽에서 아무런 준비 없이 파이썬을 호출할 수는 없습니다. 그러한 인터페이스를 만드는 것 자체에 약간의 오버헤드는 있을 수 있으니, 그 오버헤드를 고려하는 것이 좋습니다.
  • 언어와 언어가 교착하는 접점에서의 디버깅은 각 언어 내부에서 하는 디버깅보다는 조금 까다롭습니다. 그러므로 모듈을 만들기 전 상호간의 프로토콜을 잘 맞추어 두는 것이 좋겠습니다.
  • 만들어진 소프트웨어를 배포할 경우, 파이썬의 코드가 반드시 포함되어야 합니다. Python C API의 라이브러리 뿐 아니라 의존성 있는 파이썬 스크립트까지 모두 포함해서 말입니다. 파이썬이 기본적으로 포함된 리눅스나 맥 기반이면 큰 부담은 없지만, 윈도우라면 정말 최악의 경우 사용자에게 파이썬 기본 설치를 요구할 수도 있습니다.

준비하기

파이썬 다운로드 및 설치

파이썬 언어가 시스템에 설치되어 있어야겠죠. 각 플랫폼별로 나누어 간략하게 설명하겠습니다.

Windows

윈도우는 모든 언어의 인터프리터, 컴파일러를 별도로 설치해야 합니다. 이 점이 좀 번거롭죠 m(
2014년 3월 현재 Python 2.X의 최신 버전은 2.7.6이며 이를 대상으로 문서를 설명합니다. http://www.python.org/downloads/ 에서 윈도우용을 다운로드 받습니다. 단 64비트 시스템에서는 주의할 점이 한 가지 있습니다. 64비트 C 컴파일러를 사용한다면 파이썬도 64비트 버전을, 32비트 C 컴파일러를 사용한다면 32비트 버전의 파이썬을 설치하세요. 이걸 지키지 않으면 빌드할 때 에러가 발생합니다. 물론 64비트 시스템에 32비트 버전 파이썬을 설치해도 파이썬 인터프리터 실행이나 파이썬 스크립트 실행 만이라면 문제가 되지 않습니다.

설치한 후 환경변수 설정을 해 주어야 쓰기 편하죠. 기본적으로 C:\Python27에 파이썬이 설치되니까 PATH에 C:\Python27을 추가합니다. 아래와 같이 명령 프롬프트를 아무 경로에서 실행해 보아 파이썬 동작을 확인합니다.

> python --version
Python 2.7.6

별도로 파이썬 패키지 설치를 한다면 setuptools를 설치합니다. 환경변수를 설정한 후, setuptools-x.x.tar.gz를 다운로드 받은 다음 압축을 풀고, 압축을 풀어낸 디렉토리로 이동한 후

> python setup.py install
Python 2.7.6

하면 설치가 됩니다. 이렇게 하면 C:\Python27\Scriptseasy_install.exe가 생성됩니다. C:\Python27을 환경변수에 등록한 방법과 동일하게 C:\Python27\Scripts 또한 환경변수에 등록합니다. 마찬가지로 임의의 경로에서 easy_install을 실행하여 환경변수 등록을 확인합니다.

>easy_install --version
setuptools 2.2

'pip'도 패키지 관리에 편합니다. easy_install이 설치되었다면 간단하게 다음 명령으로 설치 가능합니다.

>easy_install pip
....

pip가 패키지 삭제 기능도 있어 좀 더 편리합니다.

Linux

배포판별로 차이가 조금씩 있겠지만, 리눅스는 거의 기본적으로 파이썬이 포함되어 있습니다. 문서의 설명을 따라해 보기 위해서는 파이썬 2버전에 맞춰 주기만 하면 됩니다.

MacOS

빌드 설정

Windows

Linux

MacOS

개괄

시작 및 종료

경로 등록

Embedded Python: Using C API

일반적인 시나리오

PyObject

모듈 로딩

변수 선언

함수 호출

리턴 값 추출

파이썬 기본 자료형 다루기

Type Casting

List

Tuple

Dictonary

Embedded Python: Boost::Python

Embedded Python: QtPython

project/embeddedpython.1393736480.txt.gz · 마지막으로 수정됨: 2014/10/09 21:23 (바깥 편집)

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki