본문 바로가기
카테고리 없음

[Python] Python 파일을 exe 파일로 전환하기 (feat. UPX)

by HarryJang 2023. 7. 12.

목차

    개요

    과외를 하다가 수강생 한 분께서 만든 프로그램을 어디서든 실행되게 하고 싶다고 하셨다. 이전까지는 그런 과정을 겪은 적이 따로 없었기에 구글링을 해봤다. os에 따라 그 방식이 다른 것 같았는데 수강생 분이 사용하시는 windows 에서는 pyinstaller 를 활용해 exe 파일을 생성하고 그 생성된 exe 파일을 별도의 프로그램(python, library 등)의 다운로드 없이 실행할 수 있다는 것이다.

     

    물론 수강생 분께서 질문 해주셨으니 답변을 하기위해 알아본 것이지만, 뭔가 알아두면 나름 유용하게 많이 사용될 만한 정보 같아서 흥미를 느끼며 찾아봤었다. 오늘 적을 글의 핵심은 내가 exe 파일 생성을 시도하면서 겪은 어려움을 해결한 방법을 공유하는 것이다.

     

    전환 방법

    우선은 pyinstaller 패키지를 "pip install pyinstaller" 을 사용해서 다운로드 하면 된다. 안된다면 "pip3 install pyinstaller", "python pip install pyinstaller", "python3 pip install pyinstaller" 등 여러 커맨드를 입력해보고 그래도 안된다면 구글링을 하시길..

     

    그렇게 성공적으로 다운로드가 완료 됐다면 cmd 를 열고 전환하고 싶은 python 파일이 있는 directory 에 간 후, "pyinstaller --onefile OO.py" 를 해주면 된다. --onefile flag 는 전환 했을 때 하나의 파일로 만들어 달라는 flag 라고 보면 될 것 같다.

     

    이게 사실 다이긴 한데 여기서 나는 문제가 발생했다.

     

    UPX

    UPX is not available 이란 문구가 떴다. 말 그대로 UPX 가 불가하다는 건데 검색 해보니 파일을 compress 해주는 무언가 정도라는 답변을 얻었고 에러라기 보다는 그냥 UPX 가 없기에 일어나는 일이라 다운로드 해주면 된다고 하더라.

     

     

    Releases · upx/upx

    UPX - the Ultimate Packer for eXecutables. Contribute to upx/upx development by creating an account on GitHub.

    github.com

     

    이 사이트에 들어가서 원하는 파일을 다운하면 된다. 나 같은 경우에는 win64.zip 파일을 다운 받았다. 버전은 시기 마다 다를테니 따로 적지는 않겠다. ​ 

     

    그렇게 다운받은 파일(다운된 폴더 안에 있는upx.exe 파일)을 누구는 F 드라이브에, 누구는 D, C 에 넣으라는 등 여러가지 지시가 있었고 따랐으나 나는 잘 안되더라. 그래서 그냥 원래 내가 전환하고 싶던 파일이 있는 directory 에 넣고 "pyinstaller --onefile OO.py" 를 하니 UPX 관련 문제는 해결이 된 듯 보였다. (UPX is available 이라고 뜬다).

     

    File Name

    아마 여기까지 하면 많은 분들의 문제가 해결됐을 것 같은데, 나는 아니었다. UPX 문제는 해결됐지만 여전히 제대로 실행이 되지 않았고 그 이유는 OO.py 파일이 없다는 것이다. 이게 웬걸? path 명도, file 명도 다 같은데 그 파일이 없다니.. 이런 저런 시행 착오 끝에 dir 해서 파일 명을 확인해봤는데 .py extension 이 두개가 있더라? OO.py.py 이런 식으로 말이다. 바탕화면에서 봤을 때는 그냥 OO.py 였고, 이런 건 듣도 보도 못해서 도대체 뭔가 싶다가도 "pyinstaller --onfile OO.py.py"를 하니 문제가 해결되더라. ​

     

    아직도 .py.py 가 생긴 영문은 모르겠지만, 해야할 것도 많고 귀찮기도 해서 딱히 찾아보지는 않았다. 무튼 같은 문제를 겪고 있는 사람이 있(을지는 모르겠으나)다면, 참고 해보길 바란다.