1. 일단 pyinstaller 가 설치되어 있어야 함.
2. auto-py-to-exe를 설치
3. 코드에서 경로명을 사용할 때 상대경로를 사용해야 이미지파일 등을 제대로 인식 가능함.
<1번 방법> *이를 구현하기 위해 지저분하지만 os.path와 pathlib Path를 이용함 os.path.abspath(__file__)를 사용하면 ../ 같은 구문을 반영해줌. os.path.realpath(__file__)를 사용하면 상대경로 구문 반영못함. 상대경로를 실제 반영하기 위해서는 pathlib의 Path 클래스의 resolve()함수를 이용하면 상대경로를 자유자재로 사용가능함.
import os from pathlib import Path, PurePath
def resource_path(self, relative_path): base_path = os.path.dirname(os.path.abspath(__file__)) p = Path(os.path.join(base_path, relative_path)) return str(p.resolve()) |
<2번 방법> ==[ exe 파일을 만들 때 onefile 옵션을 사용할 경우 : 실제 auto-py-to-exe 문서에서는 이 방법을 제시함. ]== def resource_path(self, relative_path):
|
1) 메인 파이썬 코드 위치 선택
2) 하나의 파일로
3) 콘솔베이스로 : exe 실행하면 콘솔도 같이 뜸.
콘솔도 같이 뜨도록 조치하면 디버깅하기 좋음.(디버깅이 다 끝나면 window base 옵션으로 다시 실행하면 됨.)
관리자권한으로 커멘드창 열어서 exe 실행하면 오류내용을 쉽게 확인 할 수 있음.
4) exe 파일의 아이콘 이미지
5) 메일파일이 사용하는 파일경로(UI구성 이미지파일 또는 프로그램내에서 불러오거나 할 파일의 경로 설정
[이부분이 매우 중요함.. 이렇게 설정하지 않으면 아무리 상대경로로 지정해도 해당 파일을 불러오지 못함.]
처음엔 콘솔도 같이 뜨도록 옵션주고, 코드에는 resource_path 함수 사용해서 가져온 경로를 출력하는 코드를
넣어서 정확히 어떤 경로를 가져오는 지 확인하며 디버깅하면 효과적임. (이부분에서 엄청나게 삽질함.. T T)
<자주 발생하는 에러유형> 1. pyqt5를 exe로 만들어 실행시 발생하는 에러 => pyqt5의 버전을 달리해서(최신으로) 다시 설치하면 해결 2. exe파일 클릭시 실행할 수 없다는 에러 => pyinstaller 와 파이썬 버전이 맞지 않아 생기는 오류로 현재 3.5~3.7까지 태스팅이 완료되어 잘 돌아간다고 하니.. python 버전을 확인하고, pyinstaller 는 최신버전으로 재설치하면 해결 3. UI에서 이미지 파일 등을 인식못하는 경우 onefile 옵션으로 exe파일을 만들었을 경우는 상기 테이블 2번 방법으로 파일 경로를 설정하는 코드로 변경해야 작동함. 일단 exe 파일 변환 전에는 base_path = os.path.abspath(".") 를 베이스경로로 이용하고 exe파일로 실행시에는 base_path = sys._MEIPASS을 베이스경로로 이용함. |