이번 포스팅에서는 py 파일을 Windows Application(.exe) 파일로 변환하는 방법에 대해 알아보자.
PC에 Python이 설치되어 있고, 해당 py 파일을 실행시키기 위한 모든 라이브러리가 준비되어 있다면 굳이 괜히 용량만 커지고 느려지게 exe로 변환시킬 필요가 없다.
그러나 우리 프로그래머들은 일반인(?)의 마음을 헤아려야 한다. 굳이 컴공에 관심도 없는 사람이 쓰지도 않는 Python을 오직 Python 인터프리터을 쓰기 위해 설치해두겠는가.
cx_Freeze
필자가 exe 변환에 사용한 플랫폼은 바로 cx_Freeze다. (원래는 많이 사용한다는 py2exe를 사용할려고 했는데, 현재 최신 버전인(2018년 5월 기준) Python 3.6는 아직 지원하지 않는다고 한다.)
그래서 cx_Freeze에 대해 조금 알아보니 다른 OS도 지원하는 교차 플랫폼에 여러가지 편리한 기능도 갖고 있다고 하니 일단 이걸 알아두기로 했다.
패키지 설치
패키지 설치는 역시나 pip를 통해서 할 수 있다.
setup.py 준비
cx_Freeze는 외부에서 exe로 변환을 원하는 py 파일에 접근한 후, 읽어들여 Build하는 방식으로 작동한다. 즉, 외부에서 cx_Freeze의 메소드를 실행시키기 위한 코드(setup.py)가 하나 더 필요한 것이다.
먼저 자신이 원하는 setup.py 작성을 위해 필자가 대충 작성한 예제 코드를 살펴보자.
(예제 코드임으로 동작하지 않음)
# 1
buildOPtions에서는 딕셔너리 형태로 어떤 패키지를 포함할 것이고 제외할 것인지를 설정할 수 있다. 물론 여기를 그냥 텅 비워 놓더라도, cx_Freeze에서 기본으로 넣는 패키지들은 자동으로 전부 들어간다.
packages : 포함시킬 패키지
excludes : 제외시킬 패키지
# 2
대상 파일이 무엇인지 또 어떤 플랫폼인지를 구체적으로 지정할 수 있다. 필자의 경우, CLI(Command line interface) 기반의 프로그램이라고 가정하였는데, 만약 Windows에서 구동할 GUI 프로그램일 경우는 #2를 아래와 같이 수정하면 된다.
# 3
해당 exe 파일이 만들어 질때, 관련 정보를 포함한 모든 것들을 인자로 넘긴 후, setup() 메소드를 실행한다. 이제 커맨드라인으로 가서 setup.py과 code.py(대상 py 코드)를 같은 경로에 두고 다음과 같이 실행시켜 보자.
해당 경로에 build 디렉터리가 생성되고 안에 들어가보면 exe 파일과 그 파일이 단독으로 실행될 수 있도록 각종 라이브러리가 복사되어생성된 것을 확인할 수 있다.
발생할 수 있는 ERROR
곧바로 실행된다면 정말 다행이지만 필자는 2개의 오류를 겪었었다. 이 밖에도 다양한 오류가 있겠지만, 필자가 보고 해결한 것만 서술해보겠다.
1. 모듈 에러
해당 프로그램을 실행시키기 위한 모듈이 존재하지 않는다는 에러다. 해결 방법은 위의 setup.py에 exclude에 혹시나 이 모듈이 있는지 확인하고 지운 후, package에 넣어주면 된다.
근데 아직도 의문인 점은 필자의 코드에는 한 번도 사용된 적이 없는 모듈도 없다면서 에러가 뜰 때가 있다. 필자의 추측으로는 exe 변환 과정에서 다른 몇몇 라이브러리를 동작 과정과 상관없이 필연적으로 사용하는 듯하다.
2. 글로벌 변수 에러
글로벌 변수를 해당 변수가 존재하지 않는다는 에러를 띄운다.
원래 파이썬은 프로그래머가 따로 정의하지 않아도 사용할 수 있는 글로벌 변수('__변수__')가 존재하나, Windows의 exe로 변환할 경우, 글로벌 변수에 접근할 수 없다.(Mac은 가능)
해결 방법은 보통 2가지인데, 첫 번째는 해당 변수를 ''안에 넣어 문자열로써 인자를 넘기는 것이다.
이것도 필자의 추측이지만, 라이브러리가 경우를 대비해 패키지 내부에 특정 값을 준비해놓은 듯하다.
하지만 이게 안되는 글로벌 변수도 존재한다고 한다. 그럴 경우, 두 번째 방법으로 다른 메소드를 사용하여 해당 글로벌 변수의 값을 재현할 방법을 찾아내야 한다. (보통 반드시 있다. 그 변수들도 어떤 메소드로 값을 구했기 때문이다.)
[출처] Python으로 exe파일 만들기( cx_Freeze )|작성자 IML
'About 배우고 익히는법 > Python' 카테고리의 다른 글
[Python] 웹에서 파일 다운로드 받기 (0) | 2019.01.04 |
---|---|
[Python] 이미지 파일을 PDF 파일로 변환하기 (0) | 2019.01.04 |
[Python GUI] PyQt5 입문하기 + 강좌 자료 모음 (0) | 2019.01.04 |
자연어처리 과정 기록(nltk) (0) | 2019.01.04 |
유튜브 댓글 크롤링하기 (1) | 2019.01.04 |