티스토리 뷰
python 으로 좀 큰 프로젝트를 하시는 분들은 쉽게쉽게 exe 파일이 생성이 안되는걸 종종 경험 하셨을 겁니다. 제가 사용하는 방법은 pyinstaller 를 사용해서 여러 패키지가 포함된 프로젝트를 exe 빌드 하는 법을 설명 드리겠습니다.
(이 글을 보신분들은 기본적으로 pyinstaller 를 한번이라도 써보신 분들 대상입니다)
가장 기본적으로 컴파일 하는 방법은
1. .spec 파일 작성 ( pyinstaller build 스크립트 )
2. pyinstaller blahblah.spec
입니다.
우선 아래 코드는 제가 실제로 사용하는 pyinstaller 인스톨 용 스크립트 파일입니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | # -*- mode: python -*- # if you use pyqt5, this patch must be adjusted # https://github.com/bjones1/pyinstaller/tree/pyqt5_fix block_cipher = None a = Analysis(['run.py'], pathex=['C:\\Users\\seoung\\workspace\\pytool'], binaries=[], datas=[('./config','./config'), ('./gui/*.ui','./gui'), ('./script','./script')], hiddenimports=["feature.testmanager", "feature.command", "feature.consolemanager", "feature.dummymanager", "feature.testmanager", "interface.can.can", "interface.lan.lan", "interface.serial.serial", "gui.commandwindows", "gui.consolewindows", "gui.controlwindows", "gui.imageview", "gui.mainwindows", "gui.testview", "gui.scriptwindows", "gui.codeeditor", "gui.syntax", ], hookspath=[], runtime_hooks=[], excludes=[], win_no_prefer_redirects=False, win_private_assemblies=False, cipher=block_cipher) pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher) exe = EXE(pyz, a.scripts, exclude_binaries=True, name='run', debug=False, strip=False, upx=True, console=False ) coll = COLLECT(exe, a.binaries, a.zipfiles, a.datas, strip=False, upx=True, name='run') | cs |
a = Analysis(['run.py'],
에는 실제 메인 실행 파일을 넣어주시면 됩니다.
실제 제가 만들어놓은 프로젝트는 run.py 을 main 함수로 이용하고 각 feature / gui / interface 패키지를 보유하고 있습니다. (대략적인 구조는 아래와 같습니다)
workspace run.py run.spec (build script) - feature (package) command.py consolmanager.py testmanager.py dummymanager.py - gui (package) commandwindows.py consolewindows.py mainwindows.py scriptwindows.py *.ui (pyqt 디자인 파일) - interface (package) - can can.py - lan lan.py - serial serial.py |
그리고 hiddenimports = [...] 에는 개발자가 만든 패키지 및 import 되어 있는 라이브러리 들을 포함시켜 주시면 됩니다. (예를들면 import paramiko 를 사용시, paramiko 도 추가시켜야 합니다.)
hiddenimports 를 추가하지 않으면, 오직 run.py 에서만 import 되어있는 패키지만 사용하게 되더라고요. 만약 사용하는 모든 패키지를 run.py 에서 선언하면 될거 같긴 한데 해보진 않았습니다.
그리고 data = [..., ...] 은 실제 프로그램 동작 시 필요한 파일 들 입니다. 위의 소스트리 에서 포함되어있는 gui패키지 밑에 *.ui (qt디자인)을 예시로 들겠습니다.
만약 exe를 빌드하고 해당 ui 파일이 없다면 실행이 안되겠죠? 이러한 이유로 빌드를 할 때 필요한 파일들도 spec에 추가 시켜 주셔야 합니다.
제 예시처럼 (복사할 폴더, 목표폴더) 를 적어주시면 빌드 할 때 copy 를 수행하게 됩니다.
간단하게 포스팅을 마칠게요. 마지막으로 해드릴 말은 실제로 exe 빌드 후 파이썬이 설치되어있지 않은 환경에서 꼭 실행시켜 보시길 바랍니다. import 되어있지 않는 라이브러리들이 보통 존재 하니 이것들을 꼭 찾아서 포함시켜주셔야 합니다!
'파이썬' 카테고리의 다른 글
[pyqt5] fontcombobox 사용 예제 (2) | 2018.05.22 |
---|---|
python lambda 함수 활용 법 (3) | 2018.05.22 |
python code Editor in pyqt5 , view source line, syntax highlighting (0) | 2018.05.22 |
cx_Freeze package 나 module 추가 법 (0) | 2018.05.22 |
임베디드 개발자에게 파이썬이란? (2) | 2018.05.22 |
- Total
- Today
- Yesterday
- python 실행환경 배포
- iptime
- py 실행환경
- SQ인증 #동양열처리 #시화공단 #안산 #시흥 #금속열처리 #열처리
- 파이썬 배포판
- 파이썬배포
- 파이썬
- 속도
- 가상환경
- exe없이 파이썬 배포
- 무선랜카드
- a1000 mini
- 공유기설정
- Python
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |