wxPython 은 수많은 pyd 파일을 가지고 있습니다.
실행되는 프로그램이나 환경 변수 PATH 내에 존재해야지만 암묵적으로 로딩됩니다.
다른 파이썬 파일처럼 sys.path.append(dll위치) 같은 꼼수로는 로딩되지 않습니다.
그래서 wxPython 으로 만든 프로그램을 배포할때는 문제가 생깁니다.
py2exe 에서는 각종 파이썬 모듈들을 잘 모아서 깔끔하게 한폴더에 넣어준다는 것입니다.
이때 만들어지는 library.zip 을 쓰면 파이썬이 없어도 잘 실행이 됩니다.
해답은...
py2exe 에서는 놀랍게도 엄청 간단한 방법을 사용하고 있습니다.
암묵적으로 로딩하는 대신
명시적으로 로딩하는 방법이죠 (-ㅁ-)!
py2exe 를 실행하고 난 다음
build/bdist.win32/winexe/temp 폴더를 보시면
wx._activex.py
wx._aui.py
wx._controls_.py
wx._core_.py
wx._gdi_.py
.. 등등 ...
위와 같은 파일들이 자동 생성됩니다.
내용을 살포시 열어보면
def __load():
import imp, os, sys
try:
dirname = os.path.dirname(__loader__.archive)
except NameError:
dirname = sys.prefix
path = os.path.join(dirname, '_core_.pyd')
#print "py2exe extension module", __name__, "->", path
mod = imp.load_dynamic(__name__, path)
## mod.frozen = 1
__load()
del __load
너무 복잡한가요 ~(-_-)?
핵심만 긁어보면 바로 mod =
imp.load_dynamic(__name__, path) 이것입니다.
햐햐
py2exe 이런 쌈박한 녀석! -_-