[pyinstaller] pyinstaller 로 model 및 ui 파일을 포함하여 하나의 exe 파일 생성하기

timdalxx·2021년 12월 30일
2

PyQt5

목록 보기
2/4
post-thumbnail

하나의 exe 파일 생성이 필요한 이유

pyinstaller로 아무 옵션없이 exe 파일을 생성하면 여러 폴더가 생성되며 exe가 존재하는 폴더에 패키지들이 보여지게 된다. 패키지들을 유동적으로 관리하기 위해선 보여지는 것이 좋지만 배포 파일을 깔끔하게 보여주기 위해선 하나의 실행파일로 만들 필요가 있다.

필자가 구현한 프로그램은 GUI가 존재하며, model을 로드해야 하는 프로그램임을 미리 명시해둔다.

방법 및 결과

1. 포함해야 하는 파일 로드 경로 지정

하나의 파일로 생성시 실행 파일이 패키지 경로를 헷갈리지 않게 만들기 위해 실행 파일 위치를 시작 경로로 변경해줄 필요가 있다.

예를 들어 ".ui" 파일을 로드해야 하는 경우,

BASE_DIR = os.path.dirname(os.path.abspath(__file__))
        self.ui = uic.loadUi(BASE_DIR+"\selectFolderView.ui", self)

위와 같이 로드할 수 있도록 경로를 지정해주어야 한다.


2. 옵션 사용하여 하나의 파일 생성

pyinstaller -w --onefile 원하는파일명.py

-w : 콘솔 창을 띄우지 않음(GUI가 있을 시 유용)
-onefile : 여러 파일을 함께 생성하지 않고 하나의 파일로 생성

위 명령어를 동시에 사용하면 dist/ 폴더에 하나의 exe 파일이 생성된다.

3. ".spec" 파일 수정

datas = [('포함하려는 폴더/파일', '배포 폴더 안 위치'), ...]

위와 같이 수정 후

pyinstaller -F 원하는파일명.spec

명령어로 spec 파일을 업데이트하면 되겠다.


4. dist/ 폴더 확인


파일이 dist/ 폴더에 하나만 생성되었고, 모델과 ui 를 포함한 작동과정이 올바르게 실행되는 것을 확인하였다.

다른 컴퓨터에서 실행파일 하나로 작동되는 지는 추가로 확인해봐야 한다.

(추가) 다른 석사 언니 컴퓨터에 exe 파일만 보내서 테스트해봤는데 작동 잘된다!

느낀점

  • exe 파일 생성할 때 시간이 굉장히 오래걸린다.. 처음에 생성할 때 최대한 신중하게 생성하는게 좋겠다!
  • -onefile 옵션을 사용하여 파일을 생성하면 exe 파일을 클릭해서 실행 시 옵션을 사용하지 않을때보다 실행시간이 훨씬 많이 소요되는 느낌이다. 검색해보니 고질적인 문제인듯
profile
Major in Computer Vision

0개의 댓글