파이썬을 활용해서 프로그램을 만들때 실행파일인 EXE로 만들 수 있습니다.
이 때 필요한 패키지는 pyinstaller인데요.
pyinstaller
PyInstaller는 파이썬 스크립트를 다양한 운영 체제의 실행 파일로 변환 할 수 있는 패키지 입니다.
Python 코드를 실행하는 데 필요한 모든 종속성과 라이브러리를 단일 파일로 만들수 있게
도와주는데요.
먼저 설치부터 진행하겠습니다.
pip install pyinstaller
![225149582 5df4697d 8f42 4478 9f76 b36f53eb8e01](https://user-images.githubusercontent.com/84913626/225149582-5df4697d-8f42-4478-9f76-b36f53eb8e01.png)
여기까지 진행하면 파이썬 exe 실행파일 만들기는 모두 완료되었습니다.
이제 간단하게 파이썬 프로그램을 exe로 만들어 보겠습니다.
파이썬 exe 프로그램 만들기
간단한 명령어로 만들 수 있는데요.
세부 명령어는 홈페이지를 참고하시면 되고,
저의 경우 하나의 파일로 만드는 -F 옵션만 입력하였습니다.
pyinstaller -F test1.py
![225151332 92e74152 ae45 4776 aa86 c8046bea3095](https://user-images.githubusercontent.com/84913626/225151332-92e74152-ae45-4776-aa86-c8046bea3095.png)
따로 이름 옵션을 주지 않았기 때문에, dist 폴더에 파일이 생성됩니다.
![225156938 2177038a 2b54 4b4a ac72 7a3fb40bb1f4](https://user-images.githubusercontent.com/84913626/225156938-2177038a-2b54-4b4a-ac72-7a3fb40bb1f4.png)
그리고 파일 추가를 위해서는 add-data 옵션을 사용하는데요.
예를 들어 csv 같은 파일 첨부시에는 add-data 옵션을 사용합니다.
–add-data : 파일 추가
등이 있는데 여기서 특히 –add-data는 데이터 유형에 따라 DEST가 다르게 설정됩니다.
그리고 윈도우에서는 세미콜론을 유닉스에서는 콜론으로 구분합니다.
Single file: “test.csv:.” -> DEST = .
이걸 윈도우에서 한다면 “test.csv;,” 로 변경해주셔야 합니다.
multiple files: “images/*.png:sfx” -> DEST = sfx
folder: “images:data” -> DEST = data
그리고 이 때 파일의 폴더는 임시 파일에 저장되는데요.
pyinstaller 가 실행되는 방식에 대한 이해가 선행 되어야 합니다.
기본적으로 pyinstaller 로 만들어진 실행파일은 최초 exe 실행시에 실행에 필요한 모든 파일을
임시폴더에 풀어낸 후에 실행되게 됩니다. 하지만 이때 이 임시폴더는 실행시마다 경로가
달라지게 됩니다. 그리고 그 폴더를 우리가 접근할 수 있게 하기 위해
sys._MEIPASS 라는 변수가 선언되어 있습니다.
이를 아래처럼 설정해도 되구요.
def resource_path(relative_path):
try:
# PyInstaller에 의해 임시폴더에서 실행될 경우 임시폴더로 접근하는 함수
base_path = sys._MEIPASS
except Exception:
base_path = os.path.abspath(".")
return os.path.join(base_path, relative_path)
아니면 직접적으로 test_path에 지정해주셔도 됩니다.
try:
# sys.MEIPASS is temp directory for pyinstaller
test_path = os.path.join(getattr(sys, '_MEIPASS'), "test.csv")
except:
test_path = os.path.join(os.path.abspath("."), "test.csv")
보다 자세한 사용법은 아래 설명서를 참고해보세요.
https://pyinstaller.org/en/stable/spec-files.html?highlight=–add-data#adding-data-files