".py" 확장자의 파이썬 코드는 매우 작은 용량이지만 방대한 일을 처리할 수 있는 신기한 파일입니다. 하지만 컴퓨터에 파이썬 interpreter가 설치되어 있어야 하고 코드에서 사용한 다양한 라이브러리들이 모두 설치가 되어 있어야만 실행이 가능합니다. 그래서 내가 짠 코드를 다른사람에게 배포하기가 까다롭습니다.
이럴때 ".exe"의 실행파일로 묶어서 배포할 수 있게끔 하는 "pyinstaller"를 이용하는 방법입니다.
(윈도우 환경에서 IDE로 Visual Studio를 사용하는 기준입니다. 참고해주세요.)
pyinstaller 설치
먼저 파이썬에서 pip명령어로 pyinstaller를 설치합니다.
Visual Studio환경에서 pyinstaller를 설치하면 다음 경로에 설치가 됩니다. (C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\Scripts)
'.py' → '.exe' 변환
pyinstaller.exe파일이 설치된 위치로 이동을 한 다음 파일 탐색기 메뉴에서 "파일 > Windows PowerShell 열기"를 선택해서 파워쉘을 열어줍니다.
파워웰에 다음과 같은 명령어로 파이썬 코드를 실행파일로 패키징합니다.
> .\pyinstaller [--옵션1] [--옵션2] 파이썬코드경로\파일명.py
pyinstaller 명령어뒤에 실행파일로 변경하고자 하는 파이썬코드의 파일명을 넣어주면 되는데요. 해당 파이썬 파일을 pyinstaller 실행파일이 있는 위치에 가져와서 해도되고 파이썬 파일은 그대로 두고 파이썬 파일이 있는 경로를 같이적어주어도 됩니다. 이때 사용할 수 있는 몇가지 옵션이 있는데요. 유용한 옵션 두가지만 언급하겠습니다.
--onefile
프로그램이 실행하는데 필요한 모든 정보가 모두모여서 한개의 EXE파일로 변환이 됩니다. 배포할 때 아주 편하겠죠.
--noconsole
파이썬 코드가 실행될 때 같이 보이는 콘솔창을 숨기는 옵션입니다.
--icon
생성할 실행파일의 아이콘을 지정해주는 옵션입니다. 별도로 아이콘을 지정하지 않으면 다음과 같은 기본 아이콘이 적용됩니다.
아래 그림은 파워쉘에서 파이썬 변환을 실행시킨 결과입니다.
변환이 완료되면 "Budilding EXE from EXE-00.toc completed successfully."라는 메시지를 확인하실 수 있습니다.
그리고 변환이 된 실행파일은 pyinstaller.exe가 위치한 경로에 새로 생성되는 "dist"라는 폴더안에서 확인할 수 있습니다. 아주 간단하네요.
PyQt ".ui" 파일이 포함되지 않는 문제 해결법
그런데 PyQt5를 이용해서 GUI 프로그램을 만든경우 이런 에러가 발행할 수 있습니다.
PyQt로 만든 ".ui"파일이 실행파일에 포함되지 않아서 발생하는 에러입니다. 실행파일이 있는 폴더에 ui 파일을 같이 놔두면 정상적으로 실행되는것을 확인할 수 있습니다. 변환할 때 ui파일의 경로가 명확하지 않아서 그런건데 파이썬 코드에서 경로를 정확하게 명기해주면 해결이 됩니다.
다음과 같이 ui파일을 불러오는 부분을,
Ui_MainWindow, QtBaseClass = uic.loadUiType("G2BDataAPI.ui")
아래와 같이 전체경로로 변경해서 변환을 해주면 실행파일에 ui까지 완벽하게 포함되어 변환됩니다.
Ui_MainWindow, QtBaseClass = uic.loadUiType(r'D:\VSCode\MyPhtyon_collection\G2BDataAPI\G2BDataAPI\G2BDataAPI.ui')
주의할 점은 경로앞에 "r"접두어를 사용해서 폴더구조를 표현하는 "\"문자를 그대로 인식하도록 해주어야 합니다.
끝!
'Software > Python' 카테고리의 다른 글
PyQt5, QtableWidget 컬럼 너비 자동 조정 (2) | 2020.09.08 |
---|---|
Visual Studio Code로 만드는 파이썬 개발 환경 (0) | 2020.07.17 |
SQLite 시작을 위한 기초 중에 기초만 요약 - CREATE TABLE, INSERT, DELETE, UPDATE, REPLACE (0) | 2019.07.18 |
[파이썬의 기본] 클래스 메소드(Class Method) & 스태틱 메소드(Static Method) (2) | 2019.07.08 |
댓글