Programming/Python

Q. 여러 개의 파이썬 파일로 구성된 프로그램을 exe 실행 파일로 만들기 - cx_Freeze 와 pyinstaller

makeitworth 2021. 12. 21. 10:00

main.py와 main.py에서 모듈로 import해서 사용하는 py들로 구성된 간단한 애플리케이션을 만들었다.

그런데 이걸 exe파일로 만들어주라고 한다.

응?? 윈도우에 프로그램 깔 때 쓰는 그 .exe 파일?

 

조금 검색해보니 파이썬이 깔려있지 않은 환경에서도 내가 만든 애플리케이션을 사용할 수 있게 만들어 주는 것이라고 한다.

 

실제 실행을 할 때는 하나의 .py 파일로 끝나는 앱이든, 여러 개의 .py을 모듈로 불러와서 실행하는 앱이든 큰 차이는 없이, 실행 파일에 대해서만 exe를 만들면 된다.

 

나는 pyinstaller와 cx_Freeze를 모두 시도해봤는데 내 경험에 미루어보자면, 처음에는 pyinstaller가 간단해보였지만, 결과적으로 cx_Freeze에서 setup.py를 만들고, 필요한 설정들을 미리 한 다음 exe 실행파일을 만드는 게 오류가 덜 나고 덜 골치 아팠다. 

 

개발환경 windows10 / python 3.8.12 / intel CPU

 

1. pyinstaller 로 exe파일 생성

pyinstaller의 경우에는 cmd에서 아래의 명령어로 패키지를 설치한다음,

pip install pyinstaller

계속 cmd 창에서 앱을 실행시키는 메인이 되는 .py파일에 대해 (내 경우는 main.py) 실행하면 된다.

pyinstaller main.py

엄청나게 간단하지만, 이렇게만 해서 오류나지 않고 잘 실행되기는 쉽지 않다고 한다.

나 역시 여러가지 오류가 산재.

처음에는 무엇이 오류인지 확인하기도 쉽지 않았다.

 

pyinstaller 실행 후에 생성되는 .spec 파일에 들어가 파일의 경로나 포함할 라이브러리, 제외할 라이브러리 등을 지정해주고 다시 저장해주어야 한다. 또는 pyinstaller 실행할 때 여러가지 옵션을 활용해서 지정해줄 수도 있다. (다큐멘테이션 링크 : https://pyinstaller.readthedocs.io/en/stable/index.html)

 

2. cx_Freeze로 exe파일 생성

 

먼저 동일하게 패키지 설치

 

pip install cx_Freeze

cx_Freeze를 활용할 때는 pyinstaller와는 다르게 setup.py를 작성해줘야 한다.

(다큐멘테이션 링크 : https://cx-freeze.readthedocs.io/en/latest/)

(setup.py 작성에 참고한 블로그 : https://coding-yoon.tistory.com/24)

 

나는 cmd에서 명령어 옵션을 주거나 나중에 일일이 오류를 잡아가면서 .spec를 작성하는 것 보다 setup.py를 작성하는게 더 명확하다는 생각이 들었고, 나중에 실행

할 때 오류도 덜 났다. (pyinstaller 명령어로 옵션 주는 것이 얼마나 까다로우면, auto-py-to-exe 라고 pyinstaller 명령어 작성해주는 ui 까지 따로 나왔겠나.

 

exe 생성은 아래와 같이 하면 된다.

python setup.py build

 

다만 아쉬운 건 pyinstaller 처럼 onefile 옵션이 없다는 것. (main.exe 파일이 있는 폴더에 .dll 파일들이 덕지덕지 붙어 나오지 않는...)

 

이것 때문에 pyinstaller onefile 옵션에 도전하는 바람에 많은 시간이.... 날라가고 마는데....