py2exe시 unknown encoding: cp949 대한 대처.
Windows2000, python 2.3.3 환경입니다.
9x나 NT,XP는 테스트 안 해봤습니다.
'cp949' 엔코딩 사용시 파이썬스크립트상태로 실행하면 아무런 문제가 없습니다.
하지만, py2exe로 패키징하여 실행하면 에러가 납니다.
encoding 패키지를 강제로 포함시켜도 말이죠.
perky, exman 님등에 물어본 결과 py2exe로 실행하면 lib\site.py 를
자동으로 임포트하지 않아서 생기는 문제인 것 같다고 합니다.
가장 손쉬운 해결방법은 'mbcs' 엔코딩을 사용하는 겁니다.
이 경우 스크립트나 py2exe도 모두 실행 잘 됩니다.
문제는 리눅스나 타 OS에서 mbcs 엔코딩을 인식하지 못한다는 겁니다.
물론 윈도에서만 쓸거라면 고집하면 모르겠지만 python의 멀티플랫폼지원이 빛을 바래겠죠?
그러면 cp949를 윈도상에서 쓸 경우 py2exe시 에러유형을 보겠습니다.
유형 A.
아래와 같은 코드가 포함된 소스를 execfile()로 실행하면
코드: |
# -*- coding: cp949 -*- |
아래의 에러메시지를 만나게 됩니다.
코드: |
SyntaxError: 'unknown encoding: cp949' |
유형 B.
다음 코드 같은 경우
코드: |
unicode(mi18n.Msg.AutoUpdate,'cp949').encode('cp949') |
아래의 에러메시지를 만나게 됩니다.
코드: |
LookupError: unknown encoding: cp949 |
해결법.
유형A,B 모두 CJKcodecs를 설치해야합니다.
CJKcodecs 는 여기서 다운로드 : http://cjkpython.i18n.org/index-ko.html
해결 A.
execfile() 를 실행하기전에 다음과 같이 임포트합니다.
코드: |
from cjkcodecs import aliases |
그리고 py2exe 실행시 다음과 같은 옵션으로 CJKcodecs 패키지를 강제로 추가합니다.
py2exe가 자동으로 추가해주지않는군요.
코드: |
--packages encodings,cjkcodecs |
해결 B.
'cp949' 엔코딩을 사용하기 전에 다음과 같이 임포트합니다.
코드: |
from cjkcodecs import multibytecodec, mapdata_ko_KR, cp949, _cp949, aliases |
참고로 이건 테스트해보지않았습니다. 아마도 될듯..
안되면 py2exe시 위와 같이 옵션을 추가해 보세요.
참고로, 어제(2월13일) CJKPython2.3.3을 perky 님께서 릴리즈했네요.
cjkcodecs 패키지를 아예 python23h.dll 에 포함시켜서 위와 같이 복잡하게 생각안해도 된다는군요.
Python2.4에 기본으로 포함된다니 2.4가 빨리 출시되기를 기다려겠네요.
지금 CJKPython2.3.3으로 바꿔서 테스트하러 갑니다.. 캬캬캬.
출처 : http://python.kr/