파이썬 코드로 작성할 걸 공유해야하는 경우가 생겼다.
특정 서버에 설치된 DB에 데이터를 insert 작업하는 코드였는데 코드 자체를 보내기 보다 배치파일로 만들어 실행하게 하면 편하지 않을까 싶었다. 그래서 파이썬 코드를 배치파일로 만드는 법을 찾아봤는데 찾아보니 파이썬 코드를 배치파일로 바로 만드는 방법은 없었다. 대신 로컬에 있는 파이썬 코드를 불러 실행하는 배치파일 만드는 법은 있었다. 그것도 좋은 방법이긴 했지만 그렇게 하려면 해당 서버에 파이썬 설치와 함께 파이썬 코드를 그 서버에 저장해야 했다.
방법이 번거로워서 다른 방법이 있는지 찾아봤다.
찾고 찾아보니 파이썬 코드를 exe파일로 변환하여 배포하는 방법이 있었다.
바로 파이썬의 pyinstaller를 활용하여 코드를 exe파일로 바꿀 수가 있었다.
PyInstaller란?
PyInstaller는 Python 스크립트를 독립 실행 파일로 변환해주는 패키징 도구다. 이를 통해 Python 스크립트를 다른 사용자들과 공유할 때 Python 설치 없이도 실행할 수 있는 실행 파일로 만들 수가 있다.
PyInstaller의 장점
- Python 인터프리터나 추가 의존성을 설치할 필요가 없어 편리하다.
- 단일 파일 또는 디렉토리 구조로 실행 파일을 생성할 수 있다.
- 다양한 플랫폼에서 실행 파일을 동작시킬 수 있다.
파이썬 코드를 주지 않아도 다른 사람에게 exe파일로 주면 받는 사람은 편하게 exe파일 실행해서 사용하면 되고, 주는 사람은 코드 공개를 하지 않아도 되서 양쪽에게 좋은 서비스이지 않을까 생각했다.
PyInstaller 설치법
Python 패키지인 만큼 pip를 이용하여 설치하면 된다.
명령 프롬프트(cmd)를 열어 다음 명령어 입력 후 설치한다.
pip install pyinstaller
설치가 완료되면 파이썬 코드를 exe 파일로 만드는 작업을 하면 되는 데 그 전에 실행파일로 만들 예제 파이썬 코드를 만들어 보았다.
이름은 your_script.py로 코드는 다음과 같이 만들었다.
while True:
name = input("이름을 입력하세요 (종료하려면 'q'를 입력하세요): ")
if name.lower() == 'q':
break
print(f"안녕하세요, {name}님!")
특정 문자를 입력 받으면 그에 따른 문자열을 출력하는 단순한 예제 코드다. 그리고 'q'라는 문자를 입력했을 때 해당 코드가 종료 되도록 조건을 추가했다.
이제 이 파일을 exe파일로 만들어보겠다.
방법은 명령 프롬프트로 해당 파일이 있는 경로로 간 다음 아래와 같은 명령어를 입력한다.
pyinstaller --onefile your_script.py
이 명령어는 pyinstaller로 PyInstaller를 실행하고, --onefile 옵션을 사용하여 단일 파일 실행 파일을 생성하며, your_script.py는 변환할 Python 스크립트의 파일명이다.
추가로 exe파일을 만들 때 자주 쓰는 옵션이 있는 데 바로 다음과 같다.
--name 옵션:
설명: 실행 파일의 이름을 지정합니다.
예제: pyinstaller --name my_app your_script.py로 실행 파일을 생성하면 my_app이라는 이름의 실행 파일이 생성됩니다.
--icon 옵션:
설명: 실행 파일에 사용할 아이콘 파일을 지정합니다.
예제: pyinstaller --icon=my_icon.ico your_script.py로 실행 파일을 생성하면 my_icon.ico 파일을 실행 파일의 아이콘으로 설정합니다.
--noconsole 옵션:
설명: 실행 파일이 콘솔 창을 열지 않도록 설정합니다.
예제: pyinstaller --noconsole your_script.py로 실행 파일을 생성하면 실행 파일이 배포될 때 콘솔 창이 열리지 않습니다.
--hidden-import 옵션:
설명: 추가적인 모듈 또는 패키지를 명시적으로 포함시킵니다. PyInstaller가 자동으로 감지하지 못하는 의존성을 해결할 수 있습니다.
예제: pyinstaller --hidden-import module_name your_script.py로 실행 파일을 생성할 때, module_name 모듈을 명시적으로 포함시킵니다.
--add-data 옵션:
설명: 실행 파일에 포함할 추가 데이터 파일을 지정합니다.
예제: pyinstaller --add-data "data_files;." your_script.py로 실행 파일을 생성하면 data_files라는 추가 데이터 파일을 실행 파일과 함께 배포합니다.
--clean 옵션:
설명: 이전 빌드와 관련된 임시 파일 및 디렉토리를 정리합니다.
예제: pyinstaller --clean your_script.py로 실행 파일을 생성하기 전에 이전 빌드와 관련된 임시 파일을 정리합니다.
다시 돌아와서 위의 명령어를 입력하면
뭐가 무수한 작업이 시작되면서
마지막에 ...completed successfully로 작업이 끝나게 된다.
이 작업이 끝나면 명령 프롬프트를 실행한 경로 즉, 변환하려는 파일이 있는 경로에 들어가 보면 2개의 폴더가 생긴다. 아래 사진처럼.
이 중 dist 폴더를 들어가보면 실행파일 하나가 생겨 있는 걸 볼 수 있는데
이 파일이 바로 파이썬 코드로 만든 exe 파일이다.
이 exe파일을 실행하면
이름 입력하라는 커멘드 창이 뜬다.
여기에 '김삿갓'을 입력하고 엔터를 치니
'안녕하세요 김삿갓님!'이라는 출력을 볼 수 있다.
다음으로 q를 입력하여 엔터를 쳤다.
캡처할 새도 없이 프로그램이 종료됐다.
단번에 파이썬 코드를 실행파일로 바꾸니 속이 시원했다. 예제로 pyinstaller를 동작하는 방법을 익혔으니 이제 실전으로 가서 작업해야겠다.