20090208 :: py2exe로 배포판 만드는 요령

사무실 컴퓨터에 접속하기 위해 vpn 연결을 자동으로 만들어주는 파이썬 스크립트를 하나 만들어서 사용 중인데, 나름 꽤 유용하게 잘 쓰고 있습니다.  자동으로 세팅값을 맞출 수 있도록 심혈을 기울여 제작한 탓에 파이썬과 pywinauto 모듈만 설치하면 노트북을 갈아 엎더라도 VPN 클라이언트 설정을 자동으로 복구해 주니 참 편하게 쓸 수 있더군요. 그런데 가끔은 제가 늘 쓰던 노트북이 아닌 다른 노트북을 가지고 다닐 경우도 있고 한데, 그 때마다 파이썬을 다 설치할 수도 없는 노릇이고 해서 아예 실행 파일 형태로 만들어서 USB 메모리에 넣어다니는 것이 어떨까 하는 생각이 들더군요.

그래서 py2exe라는 녀석을 찾았습니다. 음.. 모듈을 설치한 후에 따로 setup 스크립트를 만드는 것이 조금은 이해가 안 갔습니다만 몇 가지 테스용 스크립트를 만들어서 시도해보니 이것도 꽤 신기하더군요.

아무튼 py2exe의 사용법은 대략 다음과 같습니다.

먼저 setup.py 파일을 작성합니다. 당연히 파일 이름은 setup.py가 아니어도 상관없습니다. 내용은 다음과 같습니다.

 

from distutils.core import setup
import py2exe

setup(console=[“exe로 만들 스크립트.py”])
 

이렇게 하고 setup.py로 저장한 다음(exe로 만들 스크립트와 같은 폴더에 넣어둡니다.) 도스 프롬프트 상에서 다음과 같이 입력합니다.

> python setup.py py2exe

몇 가지 간단한 스크립트를 만들어서 해보니 배포해야할 폴더의 크기가 어마어마 하다는 점에 깜짝 놀랐지만, 그래도 exe파일로 만들어 지는 것이 꽤 신기했습니다. 그래서 이번에는 vpn연결을 해주는 스크립트를 위해 setup.py 파일을 작성하고 실행했습니다… dist 폴더 내에 exe 파일은 정상적으로 만들어 졌지만 실행하니 뭔가 안됩니다. 그냥 콘솔 창이 아주 빠르게 떴다가 없어져 버리는 군요. 구글링을 통해 간단히(?) 답을 찾았습니다. py2exe를 위한 스크립트의 옵션은 그 형태가 매우 심오한 듯 합니다. 대충 아래와 같이 만들어서 성공했습니다.

from distutils.core import setup
import py2exe

setup(console = [‘vpn.py’],
        options={
                “py2exe“:{
                         “packages“:[“encodings“,”pywinauto“,”pywinauto.controls“,”pywinauto.application“], } #사용된 모듈들을 적어준다.
                  }
        )

 오 재밌네요. 그리고 wxPython을 사용한 GUI 프로그램의 경우는 조금 특이한데요. 유형이 다음과 같습니다.

from distutils.core import setup
import py2exe

setup(windows=[{“script” : “wx_logextractor.pyw“}],
        options={
                “py2exe“:{
                        “packages” : [“encodings” , “wx“,]}
                }
        ) 

이렇게 하고 나니 정상적으로 되는 듯 했습니다만, msvcp71.dll 파일이 없다고 합니다. 해당 파일은 dist 폴더에 복사해서 넣어주면 됩니다. 한가지 신기한 것은 제 시스템에도 msvcp71.dll이 설치되어 있지 않는데 pyw 그 자체로 실행했을 때는 잘 실행 된다는 점입니다. (그나저나 이런 dll 파일을 함께 패키징 할 수 있도록 하려면 스크립트에 어떤 내용을 추가해야 하는지 아시는 분 혹시 있으신가요?)

20081116 파이썬 몇 가지

요즘은 파이썬을 이리 저리 가지고 놀고 있습니다. 일단 hello world만 찍을 줄 알게 되면 이것 저것 잴 필요 없이 유용한 것들을 뚝딱 뚝딱 만들어서 가지고 놀기 제격이니까요. vpn 접속을 자동화 해주는 툴도 만들어보고, 구글API에서 날씨 정보를 읽어오는 툴도 만들어 보면서 놀고 있습니다. 그리고 놀라운 건 이런 모든 것이들이 고작 20줄 내외의 코드로 다 완성된다는 것이죠. (최근에 만든 것 하나는 이래 저래 신경을 좀 써야하는 부분이 있어서 100줄을 넘어가긴 했습니다만.)

아무튼 아주아주 간단한 문법에 코드의 양도 많지 않아서 저처럼 성격 급한 사람들에게 딱이군요. 배우기는 쉽다고 하는데, 조금만 배우고 나면 쏙쏙 머리에 쉽게 들어오는게 별로 많지 않은 것 같아요. 하지만 이런 ‘고급언어’의 경우에는 이미 사람들이 만들어 놓은 것들이 있기 때문에, 결국 사용하는 것은 분기/반복/모듈 사용… 뿐 인듯도 합니다.

암튼 오늘부터 하루에 한 시간이라도 짬을 내어 한날님의 Django 강좌를 보고서 공부를 좀 해보려 합니다.

1. 설치하기

파이썬으로 만들어진 스크립트를 실행하기 위해서는 파이썬 인터프리터가 필요합니다. ‘필요하다’는 말은 이제 거의 윈도에만 적용될 거라고 보여지는데요. 거의 대부분의 유닉스/리눅스와 맥OS에는 파이썬이 설치되어 있습니다. 제 기억이 맞다면 맥OS도 껍질 뒤의 속살은 유닉스 계열인 것으로 알고 있습니다. 아무튼 파이썬은 구글링 한 번으로 찾을 수 있습니다. 윈도에 설치할 거라면 윈도우에 맞게끔 조정이 되어있는 Active Python을 설치하는 것도 나쁘지 않겠군요.

설치는 가급적 msi 포맷으로 되어 있는 것으로 하면 됩니다. 혹 msi라는 녀석으로 설치가 정상적으로 되지 않는다면 윈도우즈 업데이트 사이트에 가서 windows installer를 최신 버전으로 설치하거나 windows installer 서비스가 최소한 ‘수동’이나 ‘자동’으로 설정되어 있는지 확인해 보면 됩니다. (확인 방법은 시작 > 실행 > services.msc ) 일단 저는 2.5.2 버전으로 설치합니다. 2.6을 설치했더니 지원되는 twill 모듈이 없더군요. (웹 브라우저를 흉내내주는 거라고 생각하시면 됩니다)

인스톨러가 설치를 마치고 나서는 패스를 지정해 주는 것이 좋습니다. 패스를 지정해 놓으면 도스 프롬프트 화면에서 파이썬으로 작업하는 것이 훨씬 수월해집니다.

시스템 패스는 다음과 같이 설정합니다.

  1. ‘내 컴퓨터’ 아이콘을 오른쪽 클릭하여 ‘속성’을 선택합니다.
  2. 시스템 등록 정보 창이 열립니다. ‘고급’ 탭을 선택합니다.
  3. 고급 탭의 맨 아래쪽에 ‘환경 변수’라는 버튼이 있습니다. 클릭합니다.
  4. 환경 변수의 아래 칸에 ‘path’ 항목이 있습니다. 이곳을 더블클릭합니다.
  5. 입력창이 매우 좁지만, 맨 뒤에 다음을 추가해줍니다. (세미콜론까지 같이 입력합니다. 파이썬 설치폴더 이름은 설치시에 바꿨다면 바뀐 이름으로 추가합니다.)
    ;c:\python25;c:\python25\scripts
  6. 이건 굳이 할 필요는 없지만 ‘PATHEXT’라는 환경변수에는 ;.PY라고 끝에 추가해 줍니다. 이를 추가해주면 도스 화면에서 setup.py 파일을 실행할 때 python setup.py 대신 setup이라고만 입력해서 실행할 수 있게 합니다.

2. easy_install 설치하기

easy_install은 파이썬에 관련된 추가 모듈 등등을 정말 손쉽게 내려 받아서 설치하도록 합니다. 마치 리눅스에서 터미널 명령 하나로 어플리케이션을 설치하고 제거하는 듯한 느낌을 받습니다. easyInstall은 설치 패키지가 따로 있는 듯도 하지만 실상 파이썬이 설치되어 있는 시스템이라면 ez_setup.py라는 파이썬 스크립트 하나로 설치가 가능합니다. 링크된 파일을 ‘다른 이름으로 링크 저장’하여 명령프롬프트에서 실행하면 됩니다.

그러면 도스 창에서 eazyInstall에 필요한 파일을 내려 받아 설치합니다. 참 쉽습니다.(?) 도스 프롬프트가 익숙치 않은 사람들은 번거롭겠지만 알고 보면 도스 프롬프트로 할 수 있는 일이 꽤 많더군요. (리눅스 사용자들이 터미널 타령 하는 이유를 조금은 알 듯도 하네요.)

3. Django 설치하기

어디선가 Django가 easy install을 지원한다는 소리를 듣고 easy_install을 설치했습니다. 그럼 한 번 설치해보도록 하지요. 명령 프롬프트에서 (아니면 그냥 시작 > 실행) easy_install django 를 입력합니다.

twill등과 같이 easy_install을 지원하는 모듈은 이런 방식으로 모두 손쉽게 설치가 가능합니다. 파이썬으로 이것 저것 만져보고 싶은게 많다면 꼭 easy_install을 설치하길 권합니다.

4. 웹 서버 및 DB 설치하기

그냥 이것 저것 장난 삼아 만들어 볼 것들이니, 웹서버를 설치하려면 RWAPM을 설치하길 강력하게 권합니다. 압축만 풀고 배치파일 하나로 서버를 껐다 켰다 할 수 있으며 아파치, PHP(는 쓰지 않겠지만), Mysql을 한 방에 설치할 수 있습니다. 다운 받고 압축 풀어서 워드 프레스 하나 설치하는데는 1분이면 충분할 듯 하군요.

사용하는 DB에 따라 다르겠지만 파이썬으로 mySql과 연동할 것이니 mysql-python을 설치하면 됩니다.
역시 easy_install mysql-python으로 한 번에 설치가능 합니다. (대체로 소스포지에 적을 두고 있고, egg 파일을 다운로드 받을 수 있는 모듈들은 이렇게 설치가 가능한듯 합니다.

RWAPM을 다운로드 받았다면 dir-setup.bat 와 install_myslq.bat를 순서대로 한 번씩만 실행해주면 됩니다. mysql의 웹 어드민으로 손쉽게 DB를 관리/확인 하고 싶다면 apm까지 설치해서 사용하는 것도 나쁘지 않을 듯 합니다. 첫 설치 이후에는 꼭 services.msc에서 해당 서비스들( RWAPM , Mysql)을 ‘수동’으로 바꿔서 쓸데없이 서버들이 시스템 리소스를 잡아 먹지 않도록 해 둡니다.

오늘은 여기가지 해서 한날님의 강좌를 따라할 1차적인 준비가 끝이 난 듯 하네요. 아 졸리다.