윈도우

wxPython 으로 GUI 프로그램 만들기 - 컴파일, py2exe

ForceCore 2009. 7. 3. 17:11
http://forcecore.tistory.com/1032 1편. 환경 갖추기
http://forcecore.tistory.com/1033
 2편. wxGlade로 틀 잡기
http://forcecore.tistory.com/1036 3편. py2exe로 exe파일로 만들기

http://www.python.or.kr/pykug/py2exe
: 이 곳을 컨닝했다.

컴파일을 할 시간이 되었다.
윈도우의 장점: 사용자는 잘 몰라도 그냥 하고싶은걸 할 수 있다.
윈도우의 단점: 뭘 모르는 사용자가 뭔가 복잡한 것을 하게 만들기란 거의 불가능(?)

대중화된 프로그램이라면 조금 복잡해도 그것만 믿고 뻐기면 되겠지만, 나한테는 그런게 있을 수 없으니깐(?) 되도록 배포도 user friendly하게 만들 필요가 있음.

우선은 py2exe를 받아 설치해야 한다. 이미 했길 빈다;;
http://forcecore.tistory.com/1032 : 첫번째, 환경 갖추기
http://forcecore.tistory.com/1033 : wxGlade로 인터페이스 디자인

그 다음에 프로그램이 완성되면 해야 하는 일이 뭔고 하니...
필자는 mod2.py라는 스크립트 하나로 -_-;; 프로그램을 모두 작성해 완성한 상태이다.
콘솔창이 없어야 하는 프로그램임!

# setup.py
from distutils.core import setup 
import py2exe 
 
setup(
    #console=["mod2.py"]
    windows=["mod2.py"]
)

그리하여, 위와 같은 내용의 setup.py 를 작성해서, mod2.py 와 함께 두었다.
콘솔 프로그램이면 console= 어쩌구를 사용하고,
그냥 윈도우 창만 뜨는 프로그램이면 windows= 을 사용하라.

setup.py py2exe
라고 스크립트를 실행하면서 py2exe 파라메터도 함꼐 주어서, exe로 만들기를 진행시킨다. 결과는?

*** finding dlls needed ***
error: MSVCP90.dll: No such file or directory

필자는 이런 에러가 났다. -_-;;;;; 이거는, 인터넷을 뒤져서, c:\windows에 받아놓으라.
다시 실행을 시키면... 잘 되는듯!

만들어진 exe를 실행시키니... 필자는... no module named shell 이라고 뜬다.
http://www.py2exe.org/index.cgi/WinShell 이게 필자가 부딪힌 문제다.
WinShell이란걸 써서, 내문서 폴더를 알아내는 기능때문에 import해서 썼는데...

setup.py를 수정하면 된다고 한다. 앞에 보정하는 내용을 넣으면 되는데...
# By default, the installer will be created as dist\Output\setup.exe.

import time
import sys

# ModuleFinder can't handle runtime changes to __path__, but win32com uses them

try:
    # if this doesn't work, try import modulefinder
    import py2exe.mf as modulefinder
    import win32com
    for p in win32com.__path__[1:]:
        modulefinder.AddPackagePath("win32com", p)
    for extra in ["win32com.shell"]: #,"win32com.mapi"
        __import__(extra)
        m = sys.modules[extra]
        for p in m.__path__[1:]:
            modulefinder.AddPackagePath(extra, p)
except ImportError:
    # no build path setup, no worries.
    pass

# setup.py
from distutils.core import setup
import py2exe

setup(
    #console=["mod2.py"]
    windows=["mod2.py"]
)

이렇게 되었음. py2exe를 하니 dist라는 폴더가 만들어졌고... 그 안에있는걸 다 묶어서 배포하면 됨.