py2exe에 해당하는 글 1

파이썬 버전 3.5 exe 파일로 만들기

Computer 비관심/PyQt5|2017. 1. 16. 16:56
반응형

Python과 PyQt를 사용해서 프로그램을 만든 뒤 EXE파일로 만드는 방법


python 3.5버전은 py2exe가 되지 않는다. EXE 파일로 꼭 만들고 싶어서 헤매고 헤맨뒤에 PyInstaller라는 모듈을 찾았다.

이 모듈을 사용하면 정말 쉽게 .py파일을 .exe파일로 컴파일 할 수 있다. 다음은 exe파일로 바꾸는 과정이다.


****** 추가 ******** 


**2020 7월 23일 **

1. 용량이 너무 커서 줄이는 법을 확인해보니

가상환경을 만들고 거기에 사용할 모듈들을 설치하고 pyinstaller도 설치한 뒤 

pyinstaller 파일이름.py를 실행하면 exe로 만드는 시간도 줄 뿐더러 용량역시 줄어든다. 


2. 아이콘을 바꾸고 싶으면 커멘드에 

-i "icon.ico"

아이콘을 ico파일로 바꾼뒤 -i "파일명.ico"를 추가한다.

*******************


1. pyinstaller 설치하기

pyinstaller는 파이썬 코드를 EXE로 만들어주는 기능을 제공한다.

파이인스톨러를 설치 하기 위해서 일단 터미널에 pip install pyinstaller 를 입력한다.



2. 파이썬 파일을 EXE 파일로 만들기 (기본)

터미널에서 exe파일로 만들 스크립트가 저장된 폴더로 들어가 pyinstaller 파일이름.py  을 입력한다.


끝! 이렇게 간단하게 .py파일이 .exe로 컴파일 된다. 하지만... exe파일을 실행해보면 커맨드창과 함께 gui프로그램이 실행된다. 

참고로 이 커맨드 창은 쓸모 없는 것이 아니다. 나중에 디버깅을 할 때 중요하다. 


하지만 남들한테 배포하고 싶을땐 저 커멘드가 있으면 완성되지 않은 느낌일  것이다. 그럼 저 커맨드 창을 어떻게 하면 없엘 수 있을까?



3. 파이썬 파일을 EXE 파일로 만들기 (커맨드창 제거)

커맨드에 -w 플래그를 붙여주면 커멘드창이 EXE파일과 함께 나오지 않는다.

pyinstaller -w 파일이름.py



그러면 이렇게 testing.exe 파일을 실행하면 커맨드창 없이 깔끔하게 실행이 된다. 만족스럽다.

그런데 exe파일이 저장된 폴더를 보면 exe파일 말고도 많은 프로그램들이 같이 만들어진다. 파일이름을 보니 사용했던 모듈과 관련된 파일들임을 알 수 있다. 

만약 더 욕심을 내서 exe파일 하나로 끝내면서도 커맨드창이 나오지 않기를 바란다면 다음과 같이 입력하면 된다.


4. 파이썬 파일을 EXE 파일로 만들기 (통합실행파일 만들기)

통합파일을 만들때 고려해야하는 점이 한가지가 있는데, 통합파일로 만들면 프로그램을 처음 띄울때 속도가 느려진다.

pyinstaller --onefile -w 파일이름.py

어째튼, 다음과 같이 파일이 exe파일 하나면서 뒤에 시컴한 커맨드 창이 나오지 않도록 py파일을 컴파일 할 수 있다!!!





관련글 - 파이인스톨러 EXE 파일 제작시 디버깅 방법과 훅에러 해결: https://infocentre.tistory.com/46?category=597740




------------------- 원문 from stack overflow----------------------

You can use PyInstaller which support python 3.5.

To install it with pip execute in terminal: pip install pyinstaller

To make the .exe file:

pyinstaller --onefile scriptname.py




This might not be directly related to your question but i think it is worth trying.

You easily do so Using PyInstaller by usin the following code.

pyinstaller -w scriptname.py

Just as simple as that and every thing is settled.



댓글()