| 양쪽 이전 판이전 판다음 판 | 이전 판 |
| project:embeddedpythongettingstarted [2014/03/02 07:06] – [Windows] changwoo | project:embeddedpythongettingstarted [2014/10/09 21:24] (현재) – 바깥 편집 127.0.0.1 |
|---|
| ====== Embedded Python 시작하기 ====== | ====== Embedded Python 시작하기 ====== |
| | |
| ===== 소개 ===== | ===== 소개 ===== |
| 파이썬은 참 매력적인 언어입니다. 리스트, 튜플, 딕셔너리 같은 자료형들이 기본적으로 제공되고, 풍부한 라이브러리는 물론 쓰기도 편리합니다. 그리고 다른 언어와도 잘 어울립니다. 흔히 이를 일컬어 '풀 언어 (glue language)'라고 하죠. | 파이썬은 참 매력적인 언어입니다. 리스트, 튜플, 딕셔너리 같은 자료형들이 기본적으로 제공되고, 풍부한 라이브러리는 물론 쓰기도 편리합니다. 그리고 다른 언어와도 잘 어울립니다. 흔히 이를 일컬어 '풀 언어 (glue language)'라고 하죠. |
| |
| === Extending === | === Extending === |
| 파이썬에서 extending, 즉 '확장'했다는 말은 파이썬 측에서 다른 언어를 바인딩하여 다른 언어가 제공하는 기능을 활용하는 것입니다. **파이썬에서 C/C++ 코드를** 쓰는 것은 이 예입니다. | 파이썬에서 extending, 즉 '확장'했다는 말은 파이썬 측에서 다른 언어를 바인딩하여 다른 언어가 제공하는 기능을 활용하는 것입니다. **파이썬에서 C/C++ 코드를** 쓰는 것은 이 예입니다. 본 문서는 이 부분을 다루지는 않습니다만 'extended python'이란 용어 자체는 '확장된 파이썬', python extension은 '파이썬 확장'이라고 해석하도록 하겠습니다. |
| |
| === Embedding === | === Embedding === |
| Extending의 반대입니다. 파이썬이 다른 코드에 '삽입'되었다는 뜻이며 **C/C++에서 파이썬 코드를** 쓴다는 것은 이 쪽의 예입니다. 본 문서에서는 'embedded python'을 '삽입된 파이썬'으로 번역해 쓰겠습니다. Extending은 차후에 기회가 된다면 따로 다룰 생각이며, 본 문서에서는 삽입된 파이썬에 대해서만 다룹니다. | Extending의 반대입니다. 파이썬이 다른 코드에 '삽입'되었다는 뜻이며 **C/C++에서 파이썬 코드를** 쓴다는 것은 이 쪽의 예입니다. 본 문서에서는 'embedded python'을 '삽입된 파이썬'으로, 'python embedding'은 '파이썬 삽입' 정도로 번역해 쓰겠습니다. Extending은 차후에 기회가 된다면 따로 다룰 생각이며, 본 문서에서는 삽입된 파이썬에 대해서만 다룹니다. |
| |
| 파이썬을 삽입하는 주체가 되는 언어는 C/C++로 한정하겠습니다. 사실 C 이외에 여러 다양한 언어가 파이썬과의 통합을 지원합니다. 심지어 같은 스크립트 언어인 [[http://search.cpan.org/dist/pyperl/|Perl]]과도 가능합니다. 가능한 언어의 종류는 [[https://wiki.python.org/moin/IntegratingPythonWithOtherLanguages|파이썬 위키]]를 참고하세요. | 파이썬을 삽입하는 주체가 되는 언어는 C/C++로 한정하겠습니다. 사실 C 이외에 여러 다양한 언어가 파이썬과의 통합을 지원합니다. 심지어 같은 스크립트 언어인 [[http://search.cpan.org/dist/pyperl/|Perl]]과도 가능합니다. 가능한 언어의 종류는 [[https://wiki.python.org/moin/IntegratingPythonWithOtherLanguages|파이썬 위키]]를 참고하세요. |
| <code dos> | <code dos> |
| > python setup.py install | > python setup.py install |
| Python 2.7.6 | |
| </code> | </code> |
| 하면 설치가 됩니다. 이렇게 하면 ''C:\Python27\Scripts''에 ''easy_install.exe''가 생성됩니다. ''C:\Python27''을 환경변수에 등록한 방법과 동일하게 ''C:\Python27\Scripts'' 또한 환경변수에 등록합니다. 마찬가지로 임의의 경로에서 easy_install을 실행하여 환경변수 등록을 확인합니다. | 하면 설치가 됩니다. 이렇게 하면 ''C:\Python27\Scripts''에 ''easy_install.exe''가 생성됩니다. ''C:\Python27''을 환경변수에 등록한 방법과 동일하게 ''C:\Python27\Scripts'' 또한 환경변수에 등록합니다. 마찬가지로 임의의 경로에서 easy_install을 실행하여 환경변수 등록을 확인합니다. |
| </code> | </code> |
| pip가 패키지 삭제 기능도 있어 좀 더 편리합니다. | pip가 패키지 삭제 기능도 있어 좀 더 편리합니다. |
| | |
| | 본 문서에서는 직접적으로 easy_install이나 pip를 직접적으로 필요로 하지 않습니다. 설치 시 참고만 하시면 됩니다. |
| === Linux === | === Linux === |
| 배포판별로 차이가 조금씩 있겠지만, 리눅스는 거의 기본적으로 파이썬이 포함되어 있습니다. 문서의 설명을 따라해 보기 위해서는 파이썬 2버전에 맞춰 주기만 하면 됩니다. | 배포판별로 차이가 조금씩 있겠지만, 리눅스는 거의 기본적으로 파이썬이 포함되어 있습니다. 문서의 설명을 따라해 보기 위해서는 파이썬 2버전에 맞춰 주기만 하면 됩니다. |
| 비주얼 스튜디오에서 빌드하려면 따로 include path, library path를 프로젝트 설정에서 지정해 주어야 합니다. [[http://msdn.microsoft.com/en-us/library/a4xbdz1e%28v=vs.90%29.aspx|Property sheet]]를 사용하는 것이 편리하겠죠. | 비주얼 스튜디오에서 빌드하려면 따로 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''에 설치됩니다. | 불행히도, 또는 일반적으로도 그렇듯이 유닉스 계열에 비해 윈도우 쪽이 빌드할 때 훨씬 불편합니다. 일단 윈도우에서는 이후 설명할 ''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''도 환경변수를 등록해야 할 겁니다. | 또한 디버그 버전 빌드 때에는 링킹 단계에서 ''python27_d.lib'' 파일을 찾을 수 없다는 메시지까지 나옵니다. 파이썬 공식 홈페이지에서 받은 인스톨러 패키지에는 디버그 버전의 라이브러리가 빠져 있기 때문입니다. ''python27_d.lib'' 파일을 온전히 생성하려면 파이썬 소스를 받아다 직접 컴파일해야 합니다. |
| | |
| | 참고로 파이썬은 bzip, Berkely DB, OpenSSL, SQLite, Tcl/Tk에 의존성이 있고, 또 의존성 패키지들은 Perl과 NASM 등을 필요로 합니다. 윈도우에 패키지 관리자가 있었으면 참 좋겠는데 하는 생각이 들죠. 아무튼 비주얼 스튜디오를 이용하는 경우 직접 파이썬을 빌드하지 않는 한 좀 아쉽더라도 릴리즈 모드를 이용해야 할 겁니다. |
| |
| MinGW를 이용한다면 ''-I'' 옵션과 ''-L'' 옵션, 그리고 ''-lpython27'' 옵션까지 다 집어 넣으면 되겠습니다. 인스톨러에 ''libpython27.a''가 같이 제공됩니다. | MinGW를 이용한다면 ''-I'' 옵션과 ''-L'' 옵션, 그리고 ''-lpython27'' 옵션까지 다 집어 넣으면 되겠습니다. 인스톨러에 ''libpython27.a''가 같이 제공됩니다. |
| |
| === Linux === | === Linux === |
| 리눅스에서는 ''[[http://docs.python.org/2/extending/embedding.html#compiling-and-linking-under-unix-like-systems|python-config]]''을 통해 좀 더 편하게 설정을 알아낼 수 있습니다. 시스템에 따라 'python2.7-config'이나 'python-config-2.7' 처럼 약간 차이는 있을 수 있습니다. 이 명령어로 파이썬 자체가 빌드될 때 컴파일 옵션, 링커 플래그 등을 알아낼 수 있습니다. 이 값들은 파이썬 자신이 빌드될 때 설정된 값이어서 절대적으로 준수해야 할 것은 아닙니다. 경우에 따라서 헤더 파일의 경로, 라이브러리 경로와 라이브러리 이름만 지정해도 충분합니다. | 리눅스에서는 ''[[http://docs.python.org/2/extending/embedding.html#compiling-and-linking-under-unix-like-systems|python-config]]''을 통해 좀 더 편하게 설정을 알아낼 수 있습니다. 시스템에 따라 'python2.7-config'이나 'python-config-2.7' 처럼 약간 차이는 있을 수 있습니다. 이 명령어로 파이썬 자체가 빌드될 때 컴파일 옵션, 링커 플래그 등을 알아낼 수 있습니다. |
| | |
| | ''--cflags'', 혹은 ''--ldflags''의 값들은 파이썬 자신이 빌드될 때의 설정인지라 반드시 준수해야 할 것은 아닙니다. 경우에 따라서 헤더 파일의 경로, 라이브러리 경로와 라이브러리 이름만 지정해도 충분합니다. |
| |
| 그래도 적절히 이식성 좋은 컴파일 명령어를 위해서는 다음 정도가 적절합니다. | 그래도 적절히 이식성 좋은 컴파일 명령어를 위해서는 다음 정도가 적절합니다. |