사용자 도구

사이트 도구


project:embeddedpython

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

양쪽 이전 판이전 판
다음 판
이전 판
project:embeddedpython [2014/03/02 06:24] – [Windows] changwooproject:embeddedpython [2014/10/09 21:24] (현재) – 바깥 편집 127.0.0.1
줄 1: 줄 1:
-====== Embedded Python 시작하기 ====== +====== Embedded Python ====== 
-===== 소개 ===== +2014년 3월 현재 [[lifemotif:start|LifeMotif]]는 [[http://code.google.com/p/lifemotif-desktop/|데스크탑용 어플션]]을 제작 중, 파이썬 임베딩 코드를 삭제한 상태이다. 그러나 그동안 알아낸 파이썬 임베과 관련된 지식들은 문서하여 소중하게 보해 두는 것이 좋다고 생하여 본 문서 작업을 실행한다.
-파이썬은 참 매력적인 언어입니다. 리스트, 튜플, 딕셔너리 같은 자료형들이 기본적으로 제공되고, 풍부한 라이브러리는 물론 쓰기도 편리합니다. 그리고 다른 언어와도 잘 어울립니다. 흔히 이를 일컬어 '풀 언어 (glue language)'라고 하죠. +
- +
-/* 사실 저는 그동안 '풍부한 자료형'과 '쉽고 강력한 라이브러리'의 덕을 충분히 보아 오긴 했습니다만, 아직 다른 언어와의 교착(binding)이란 면에서 직접적으로는 큰 인상을 받지 못했습니다. 물론 간접적으로 알게 모르게 상당히 큰 혜택을 받아오긴 했었다는 사실을 알고 있지만요. 예를 들어 보통 [[http://www.gtk.org|GTK]], [[https://www.wxwidgets.org|wxWidget]] 등의 GUI 라이브러리들을 파이썬에서 사용할 때는 [[http://www.wxpython.org/|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 이외에 러 다양한 언어가 파이썬과의 통합을 지원합니다. 심지어 같은 스크립트 언어인 [[http://search.cpan.org/dist/pyperl/|Perl]]과도 가능합니다. 가능한 언어의 종류는 [[https://wiki.python.org/moin/IntegratingPythonWithOtherLanguages|파이썬 위키]]를 참고하세요. +
- +
-파이썬 삽입을 하게 되면 다음과 같은 장점을 가집니다. +
-  * 파이썬 및 파이썬의 라이브러리들을 활용할 수 있습니다. 유연하고 자유분방한 파이썬을 이용해 빠르게 모듈을 생성합니다. '배터리 포함'된 파이썬 라이브러리를 사용하는 것도 꽤 멋집니다. +
-  * 핵심 모듈을 매번 컴파일할 필요가 없습니다. 컴파일할 필요도 없을 뿐더러 모듈만 따로 파이썬 인터프리터를 통해 간편하게 테스트할 수 있습니다. 모듈 변경에 있어 상당히 유연해집니다. +
- +
-그러나 다음과 같은 사항은 꼭 고려해 셔야 합니다. +
-  * 암만 도 파이썬이 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''을 추가합니다. 아래와 같이 명령 프롬프트를 아무 경로에서 실행해 보아 파이썬 동작을 확인합니다. +
-<code dos> +
-> python --version +
-Python 2.7.6 +
- +
-</code> +
- +
-별도로 파이썬 패키지 설치를 한다면 [[https://pypi.python.org/pypi/setuptools#downloads|setuptools]]를 설치합니다. 환경변수를 설정한 후, ''setuptools-x.x.tar.gz''를 다운로드 받은 다음 압축을 풀, 압축을 풀어낸 디렉토리로 이동한 후 +
-<code dos> +
-> python setup.py install +
-Python 2.7.6 +
-</code> +
-하면 설치가 됩니다. 이렇게 하면 ''C:\Python27\Scripts''에 ''easy_install.exe''가 성됩니다. ''C:\Python27''을 환경변수에 등록한 방법과 동일하게 ''C:\Python27\Scripts'' 또한 환경변수에 등록합니다. 마찬가지로 임의의 경로에서 easy_install을 실행하여 환경변수 등록을 확인합니다. +
-<code dos> +
->easy_install --version +
-setuptools 2.2 +
-</code> +
- +
-'pip'도 패키지 관리에 편합니다. easy_install이 설치되었다면 간단하게 다음 명령으로 설치 가능합니다. +
-<code dos> +
->easy_install pip +
-.... +
-</code> +
-pip가 패키지 삭제 기능도 있어 좀 더 편리합니다. +
-=== Linux === +
-배포판별로 차이가 조금씩 있겠지만, 리눅스는 거의 기적으로 파이썬이 포함되어 있습니다. 문서의 설명을 따라해 보기 위해서는 파이썬 2버전에 맞춰 주기만 하면 됩니다.  +
-=== MacOS === +
-맥도 기본적으로 파이썬이 탑재되어 있어 별도로 설정할 필요는 없습니다. +
-==== 빌드 설정 ==== +
-=== Windows === +
-비주얼 스튜디오에서 빌드하려면 따로 include path, library path를 프로젝트 설정에서 지정해 주어야 합니다. [[http://msdn.microsoft.com/en-us/library/a4xbdz1e%28v=vs.90%29.aspx|Property sheet]]를 사용하는 것이 편리하겠죠. +
- +
-불행히도, 또는 일반적으로도 그렇듯이 유닉스 계열에 비해 윈도우 쪽이 빌드할 때 훨씬 까다롭습니다. 일단 윈도우에서는 이후 설명할 ''python-config-X.Y''를 사용할 수가 없습니다. 파이썬 자체에서 제공하는 [[http://docs.python.org/2.7/library/sysconfig.html|sysconfig 모듈]]을 이용하는 방법도 있으나 이마저도 빌드에 필요한 모든 정보가 제공되지는 않습니다. 대체로 ''.lib'' 파일은 ''C:\Python27\libs''에 설치됩니다. +
- +
-또한 디버그 버전 빌드 때에는 링킹 단계에서 ''python27_d.lib'' 파일을 찾을 수 없다는 메시지까지 나옵니다. ''python27_d.lib'' 파일을 온전히 생성하려면 파이썬 소스를 받아다 직접 컴파일하는 방법 밖에는 없습니다. 파이썬 소스를 보고 싶으시다면 모를까, 상당히 번거로우니 그다지 권장하지 않습니다. 그냥 ''python27.lib'' 파일을 복사하여 ''python27_d.lib'' 파일을 만드는 편법을 쓰는 것도 나쁘지 않습니다. 만일 이 lib 파일이 static library라면 이대로 실행하는 데 문제가 없습니다만, 혹시나 dynamic library인지 확인해 보세요. 만약 그렇다면 ''C:\Python27\DLLs''도 환경변수를 등록해야 할 겁니다. +
- +
-MinGW를 이용다면 ''-I'' 옵션과 ''-L'' 옵션, 그리고 ''-lpython27'' 옵션까지 다 집어 넣으면 되겠습니다. 인스톨러에 ''libpython27.a''가 같이 제공됩니다. +
-<code dos> +
->gcc -o <output> <input> -I "C:\Python27\include" -L "C:\Python27\libs" -lpython27 +
-</code> +
- +
- +
- +
-=== Linux === +
-=== MacOS === +
- +
-===== 개괄 ===== +
-==== 시작 및 종료 ==== +
-==== 경로 등록 ==== +
- +
- +
-====== Embedded Python: Using C API ====== +
-===== 일반적인 시나리오 ===== +
-===== PyObject ===== +
-===== 모듈 로딩 ===== +
-===== 변수 선언 ===== +
-===== 함수 호출 ===== +
-===== 리턴 값 추출 ===== +
- +
- +
-===== 파이썬 기본 자료형 다루기 ===== +
-==== Type Casting ==== +
-==== List ==== +
-==== Tuple ==== +
-==== Dictonary ==== +
- +
- +
-====== Embedded Python: Boost::Python ====== +
- +
-====== Embedded Python: QtPython ======+
  
 +소스 코드와 문서의 양을 생각했을 때, 분량이 상당하리라 생각하여 몇 개의 문서로 분할하여 작성한다.
 +  - [[.:embeddedPythonGettingStarted|Embedded Python 시작하기]]
 +  - [[.:embeddedPythonUsingCAPI|Embedded Python: Using C API]]
 +  - [[.:embeddedPythonBoostPython|Embedded Python: Boost::Python]] \\ 이후 작업은 부가적인 라이브러리 탐구 후에 작성
 +  - [[.:embeddedPythonQt|Embedded Python: PythonQt]]
project/embeddedpython.1393741495.txt.gz · 마지막으로 수정됨: 2014/10/09 21:23 (바깥 편집)

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki