exe 배포 시 .ui 파일 처리하는 권장하는 방법이 있나요?
306
2 asked
안녕하세요
.ui 파일을 uic를 통해 .py로 변환한 후 소스코드에 포함하여
exe 파일로 배포하는 것과
.ui 파일을 pyinstaller의 --add-data 옵션을 사용하여 .ui 파일을 포함하여 exe 파일로 배포하는 것의 차이점과
어떤 방법을 권장하시는지 궁금합니다.
Answer 1
0
안녕하세요.
PySide6 프로젝트에서 .ui 파일을 배포하는 방식에 따라 두 가지 접근 방식을 비교해 보겠습니다.
1. uic를 통해 .ui 파일을 .py로 변환 후 포함하여 배포
장점
단일 코드 파일:
.ui파일이.py파일로 변환되기 때문에 별도의.ui파일을 관리할 필요가 없습니다.성능: 런타임에
.ui파일을 읽고 파싱하는 작업이 생략되므로 약간의 성능 이점이 있습니다.코드 일관성: UI 구성 요소를 Python 코드로 변환하면 IDE의 코드 탐색 및 자동 완성 기능을 사용할 수 있어 개발 편의성이 증가합니다.
단점
변경 시 번거로움:
.ui파일을 수정할 경우, 다시uic를 사용해.py로 변환해야 하며, 이는 반복 작업을 초래할 수 있습니다.가독성 저하: 변환된
.py파일은 사람이 읽기 어렵고 유지보수 시 불편할 수 있습니다.소스 코드 확장성 제한:
.ui파일을 Python 코드로 변환하면 디자인이 코드로 하드코딩되어, 나중에.ui파일 기반으로 디자인을 변경하려면 추가 작업이 필요합니다.
2. PyInstaller의 --add-data 옵션을 사용해 .ui 파일을 포함하여 배포
장점
디자인 파일 유지:
.ui파일을 그대로 포함하므로, UI 수정이 필요할 경우.ui파일만 수정하면 됩니다. 이로 인해 디자인 변경이 빠르고 편리합니다.분리된 코드와 디자인: UI 파일과 Python 코드가 명확히 분리되므로, 유지보수성과 협업 효율성이 높아집니다.
변환 과정 생략:
.ui파일을 변환하지 않아도 되므로 반복 작업이 줄어듭니다.
단점
런타임 파일 로드:
.ui파일은 런타임에 읽고 파싱해야 하므로, 배포 후 처음 UI를 로드할 때 약간의 지연이 있을 수 있습니다.추가 파일 관리:
.ui파일을 포함하는 방식이므로 PyInstaller에 포함시키기 위한 경로 설정이나 관리가 필요합니다.
권장 방법
상황에 따른 선택
프로젝트가 단순하고 변경 가능성이 적은 경우:
uic를 통해.ui파일을.py로 변환하여 사용하는 것이 적합합니다.이유: 실행 속도와 단일 파일 관리 측면에서 유리하며, 초기 개발 후 큰 변경이 없는 경우 효율적입니다.
프로젝트가 복잡하고 UI 변경이 자주 발생하거나 디자이너와 협업이 필요한 경우:
PyInstaller의
--add-data옵션을 사용하여.ui파일을 포함하는 방식을 추천합니다.이유: 디자인과 로직이 분리되어 유지보수성과 확장성이 뛰어나며, 수정이 발생해도 빠르게 대응할 수 있습니다.
개인적인 추천
대부분의 경우, --add-data 옵션을 활용한 .ui 파일 배포 방식을 권장합니다. 이유는 다음과 같습니다:
Qt Designer로 UI를 변경할 수 있는 자유를 유지할 수 있습니다.
유지보수가 용이하며, 파일 구조가 명확합니다.
UI를
.ui파일로 유지하면 협업 시 디자이너와의 역할 분담이 쉬워집니다.
다만, 특정 상황(예: 단순 도구 제작, 변경 가능성 없음 등)에서는 변환 방식을 고려해볼 수도 있습니다. 장기적인 확장성과 유지보수성을 중요시한다면 .ui 파일 배포 방식을 선택하세요.
6-6
0
9
1
작업형 1 유형 부분
0
12
1
수강평 이벤트
0
17
2
작업형 1 (삭제예정, 구 버전)
0
31
2
강의노트는 어디있나요?
0
17
1
노션 학습 자료 권한 요청
0
17
1
수강기간 연장 문의드립니다.
0
21
1
2유형 레이블 인코딩 VS 원핫 인코딩
0
24
3
part2강의 문의사항입니다.
0
19
2
수강기간 연장 문의드립니다.
0
26
1
인덱스 슬라이싱
0
27
2
코드를 첨부해야하는 이유가 있나요?
0
20
2
QT와 QT Designer에 대한 질문 사항
1
167
2
mutex, incNumber는 global 안붙여도 되는건가요?
1
115
2
Qt Resource를 사용하는 예제 구현 10:15 구간 질의
1
140
2
데코레이터 @Slot을 꼭 써줘야 하는 건가요?
1
150
2
TableModel(QAbstractTableModel) 에서 질문입니다.
1
242
2
self가 있는 거와 없는 버튼
1
119
2
선호하는 GUI 개발 방법이 있으신가요
1
304
2
가장 큰 위젯의 너비와 같은 너비를 차지하는 2열 짜리 컬럼
1
228
2
클래스 __init__(self) 설정에서 이해가 안 되는 부분이 있습니다.
2
300
2
pyqt? pysie6? 차이점이 있을까요?
1
1316
2
자주 사용하는 Layout 살펴보기
1
151
2
강의 pdf파일 올려 주시면 안될까요?
2
236
2

