업무에 있어서 파이썬의 활용은 두드러집니다. 데이터를 조금이라도 만지는 사람이라면 말이죠. 내가 직접 만든 파이썬 파일이 아주 유용해서 다른 사람들에게 공유해 주고 싶은데 다른 사람 컴퓨터에 파이썬과 기타 라이브러리가 설치되어 있지 않은 경우가 많습니다.
처음에는 파이썬과 라이브러리들을 다른 사람 컴퓨터에 설치해 주기도 하였지만 번거로운 일인지라 몇 번 시도하고 그만두었습니다.
이를 해결하기 위한 적당한 도구를 Google신께 검색하다가 Python의 라이브러리 중 하나인 Pyinstaller을 알게 되었고, 이를 활용해서 유용한 파이썬 코드를 다른 사람들과 함께 사용하고 있습니다. 물론, 해당 환경은 파이썬 관련 프로그램이 설치되지 않았습니다.
PyQt5로 구성한 GUI를 윈도우 응용프로그램으로 만들 수 있을 뿐 아니라, GUI를 구성하지 않고도 코드를 윈도우 응용프로그램으로 만들면 콘솔창에서 동작 가능합니다.
Pyinstaller 기본 사용 방법
먼저, 사용법은 간단합니다. 파이썬에서 Pyinstaller 라이브러리를 설치한 뒤에, exe로 변환하고자 하는 코드가 있는 폴더에서 cmd 창을 열어서 'pyinstaller 내가원하는코드.py' 를 입력하면 됩니다. 요약하자면,
pyinstaller 설치 → 코드 위치에서 cmd 열기 → 'pyinstaller 내가원하는코드.py' 입력
예제로 보여드리자면, 아래와 같이 "Hello pyinstaller" 와 같은 문자열을 출력하는 코드를 윈도우 응용프로그램으로 만들어 보겠습니다.
print("Hello, Pyinstaller")
위와 같은 코드를 'Pyinstaller_example.py' 라는 파이썬 파일로 저장한 뒤, cmd 창을 열어서 'pyinstaller Pyinstaller_example.py' 를 입력하면 됩니다. 정상적으로 작동하면 cmd 창에 'Complete Successfully' 라는 메시지와 함께 dist 폴더에 윈도우 응용 프로그램이 들어있는 파이썬 파일과 동일한 이름의 하나의 폴더가 만들어집니다. 이 폴더를 들어가 보면 여러 dll 파일과 함께 exe 파일이 존재하는데 exe 파일을 열어보면 정상적으로 코드를 출력하고 있는 것을 확인할 수 있습니다.
하나의 EXE로 만들기
하지만, 이렇게 옵션 없이 윈도우 응용프로그램을 생성하게 되면 dll 파일과 같은 응용프로그램 라이브러리 파일이 많이 만들어지게 되어서 폴더 관리가 쉽지 않은 문제가 있습니다. 이를 해결하기 위해 pyinstaller 라이브러리에도 옵션이 존재합니다. 간단하게 '--onefile' 만 뒤에 붙여주면 됩니다. 이렇게 말이죠.
pyinstaller Pyinstaller_example.py --onefile
뒤에 옵션 하나를 붙여주는 것 만으로 dll 파일들을 생성하지 않고 exe 파일 1개로 코드 수행이 가능합니다. 하지만, 하나의 윈도우 응용프로그램 파일이 여러 dll 파일들을 포함하기 때문에 용량이 커진다는 단점이 있습니다.
아이콘이 있는 EXE로 만들기
또하나의 옵션을 사용하면 아이콘이 있는 윈도우 응용프로그램을 만들 수 있습니다. 바로 '--icon=아이콘.ico' 입니다. 이를 위해서 아이콘 확장자 파일이 필요한데 간단하게는 PC에서 사용하는 파일을 가져다가 쓸 수 있고, 나만의 아이콘을 만들고 싶다면 온라인에서 'png, jpg→ico' 변환 사이트를 이용하면 됩니다. 아이콘 파일의 이름이 'exicon.ico' 인 파일을 생성한다고 하면, 해당 코드는 아래와 같습니다.
pyinstaller Pyinstaller_example.py --onefile --icon=exicon.ico
해당 코드를 cmd 창에 입력하면 내가 지정한 아이콘의, 하나의 파일로 만들어진 윈도우 응용 프로그램을 확인할 수 있습니다.
Pyinstaller 라이브러리 옵션 정리
Pyinstaller 라이브러리는 앞서 언급한 두가지 옵션 외에도 많은 옵션을 제공하고 있습니다. 보통 PyQt로 만들어진 GUI 프로그램 같은 경우에는 '--noconsole' 옵션을 사용합니다. 이를 사용하면, 콘솔창이 프로그램과 동시에 뜨지 않습니다.
https://muzukphysics.tistory.com/18
https://muzukphysics.tistory.com/69
댓글