기록과 정리의 공간

[프로젝트] pyinstaller로 파이썬파일(.py) 실행파일(.exe)로 변환하기(feat.pygame) 본문

프로젝트/슈팅게임1

[프로젝트] pyinstaller로 파이썬파일(.py) 실행파일(.exe)로 변환하기(feat.pygame)

딸기맛도나쓰 2020. 6. 29. 23:20

pygame라이브러리를 이용해 만든 간단한 게임 파일을 지인들에게 배포하기 위해 pyinstaller를 이용하여 .py -> .exe로 변환하는 과정을 정리해보았다.

  • 참고 자료: 유튭영상
  • 개발 환경 : Windows10 / Python3.8
  • 프로젝트 폴더 구조

0. pyinstaller 패키지를 설치하기 전에 반드시 확인해 봐야할 것

  • 현재 pip버전이 18.1인지 확인 (아니라면, 18.1로 설치해야한다.) : 참고 링크
  • setuptools 패키지가 설치되어 있는지 (없다면, 설치하되 45미만의 버전으로 설치해야한다. 있다면, 버전이 45미만인지 체크) : 참고 링크

1. pyinstaller 패키지 설치하기

이 패키지를 사용하면 파이썬 파일을 손쉽게 실행파일로 변환할 수 있다.

pip install pyinstaller

2. cmd창을 열어 변환하고자 하는 .py파일이 있는 폴더로 이동 후 아래와 같이 입력한다.

pyinstaller game.py --onefile --noconsole
  • --onefile 옵션 : dist폴더 안에 하나의 .exe파일로 생성
  • --noconsole 옵션 : .exe파일 실행시 콘솔창 뜨지 않게 함
  • 실행파일 아이콘 변경 옵션에 관한 것은 이곳을 참고하자

그러면 해당 폴더 안에 build , dist , .spec가 생성된 것을 확인할 수 있다.

dist폴더 안을 확인해보면 --onefile옵션에 의해 .exe파일 하나로 생성된 것을 확인할 수 있다.

그런데 이 상태로 해당 .exe파일을 실행하면 아래와 같은 오류가 발생한다.

Fail to execute script pyi_rth_pkgres

3. 게임 실행에 필요한 것들을 dist폴더로 복붙해준다.

게임에 필요한 리소스들은 전부 resources에 들어있고, 아래와 같이 .py파일 내에 상대 경로로 작성되어 있다.

player = pygame.image.load("resources/images/player.png") 

따라서, 이 폴더를 .exe파일이 위치하고 있는 dist폴더로 복붙한다.

4. .exe파일과 resources를 압축하여 하나의 파일로 만들기

5. 배포하기

이제 이 압축한 .zip 파일을 배포하면 된다!
당연한 이야기지만, 압축 해제 후에 resources.exe가 같이 들어있는 폴더에서 .exe를 실행해야한다.


(참고) pygame을 이용해 작성된 .py를 .exe로 변환할 때 발생할 수 있는 현상

.py파일로 게임을 실행했을 때는 전혀 문제 없이 게임이 실행 됐는데, 변환 후에 .exe파일로 실행하면 pygame스크린이 잠시 나타났다가 바로 종료 되어버리는 현상이 발생했다. 이는 pygame.font.SysFont()로 인해 발생하는 현상이었다.

  • 참고 링크 : 클릭
  • 해결 방법 : .py 파일안에 pygame.font.SysFont()를 사용한 코드가 있다면, 첫번째 인자값을 확인해봐야한다.None이라면 위와 같은 현상이 발생한다. 이를 'Sans'로 수정해주고(특정 폰트 이름으로 수정) pyinstaller로 다시 빌드 해주면 문제 없이 실행된다.
Comments