pyinstaller를 이용해 pygame 모듈로 만든 게임을 exe실행파일로 만들었다.

그러나 "failed to execute script 파일명"이라는 에러가 뜬다.

이를 해결 위해 아래와 같은 방법을 시도해보았다.

 

1. py파일 내 상대경로를 모두 절대경로로 바꾸어준다. => 같은 오류 발생

 

2. exe파일이 든 폴더에 source 파일을 모두 옮겨준다.  => 같은 오류 발생

 

3. pyinstaller를 삭제하고 개발자용으로 재설치한다. => 같은 오류 발생

> pip uninstall pyinstaller
> pip install https://github.com/pyinstaller/pyinstaller/archive/develop.zip

 

4. --noconsole 없이 exe파일을 생성한다. => 빈 console 창만 열린다.

 

 

한편, cmd 창에서 실행했을 때 ModuleNotFoundError 가 뜨는 것을 확인했다.

(그냥 클릭해 실행하지 말고 cmd 창에서 실행하면 어떤 에러가 뜨는지 확인할 수 있다)

 

가상환경과 관련한 문제로 보인다.

 

5. anaconda > pygame 안에 있던 hook-pygame.py을 pyinstaller의 hooks 폴더로 옮긴 후, 다시 생성해본다. => 된다. 그러나 다른 에러가 ...

 

hook-pygame.py는 pygame을 hook해주는 파일 같은데, 그게 왜 난데없는 곳에 가 있었는지는 모르겠다.

 

 

 

이제는 파일이 없다는 에러가 뜬다. pygame은 성공적으로 데려온 듯.

 

혹시 몰라 python 파일 안에 경로를 print하는 코드를 한 줄 넣었는데, 이를 통해 역시나 경로를 잘못 잡고 있다는 것을 알았다. 아래는 PyCharm에서 정상적으로 작동할 때 출력됐던 경로.

D:/WYS/work/python/AI_dev/prj_shooting_game/versions/sources

 

# 절대경로
file_dir = path.join(path.dirname(__file__))+'/sources'
print(file_dir)

 

절대경로로 준답시고 path를 사용하고서는 뒤에 /sources를 붙인 게 잘못이었던 것 같다.

따라서 아래와 같이 두 방법을 사용해봤다.

 

1) 소스파일들을 같은 폴더에 넣고 절대경로로 찾도록 파이썬 파일을 수정한다. => 같은 에러 발생

 

2) 소스파일들을 같은 폴더에 넣고 상대경로로 찾도록 파이썬 파일을 수정한다. => 된다

 

 

 


 

exe실행파일을 생성하는 과정을 다시 정리해보겠다. 이때 소스파일을 load하는 코드는 상대경로로 설정하였음을 가정한다.

 

1. cmd창을 열어 pyinstaller를 설치한다.

 

> pip install https://github.com/pyinstaller/pyinstaller/archive/develop.zip

 

 

2. cmd창에서 변환할 py파일이 있는 경로로 이동하고, 아래와 같이 입력한다. (변환할 파일이 main.py)

 

pyinstaller --onefile main.py

 

만약 exe파일의 아이콘을 설정하고 싶다면, ico 파일을 같은 경로에 두고 아래 명령어를 실행한다. (아이콘 파일이 test.ico)

 

pyinstaller --icon=test.ico --onefile main.py

 

아이콘 파일은 여기에서 생성했다.

 

 

3. 해당 경로에 dist 폴더가 새로 생기는데, 거기에 exe파일이 있다. 소스 파일을 dist 폴더에 모두 옮겨 실행한다.

 

 

4. dist폴더를 통째로 압축해 배포한다.

 

완성된 취향저격 게임. 한번 플레이해보세요...  상하좌우 움직이고 스페이스바, b버튼으로 공격

다운로드 링크는 여기를 클릭

 

github.com/woocosmos/pro_shooting_game

 

복사했습니다!