메뉴 닫기

PySide6 설치·버전 가이드와 pyside6-uic·pyside6-rcc·lupdate·lrelease 사용법 총정리

PySide6 설치·버전 가이드와 pyside6-uic·pyside6-rcc·lupdate·lrelease 사용법 총정리

🧭 처음부터 막히지 않도록 설치부터 도구 사용 흐름까지 한 번에 정리했습니다

데스크톱 앱을 만들다 보면 UI를 빠르게 그려 넣고, 아이콘과 번역 리소스를 깔끔하게 묶어 배포하는 일이 생각보다 손이 많이 듭니다.
설치 단계에서 버전이 서로 안 맞거나, .ui 파일을 파이썬 코드로 바꾸는 과정에서 명령을 헷갈리면 시간만 흘러가죠.
이 글은 그런 삽질을 줄이기 위해 PySide6 설치와 버전 선택부터 핵심 커맨드 도구인 pyside6-uic, pyside6-rcc, lupdate, lrelease의 쓰임새를 실제 작업 흐름에 맞춰 정리했습니다.
처음 접하는 분도 따라오기 쉬운 설명과 함께, 현업에서 바로 쓰는 팁까지 담아 안정적으로 GUI 프로젝트를 굴릴 수 있도록 도와드립니다.

핵심은 간단합니다.
Qt Designer에서 만든 .ui를 파이썬 모듈로 변환하고, .qrc에 모은 이미지·아이콘을 리소스 모듈로 컴파일한 다음, 다국어 지원을 위해 번역 카탈로그를 생성·배포하는 순서만 잡히면 됩니다.
여기서 PySide6는 Qt for Python 구현체이며, pyside6-uic는 .ui → .py, pyside6-rcc는 .qrc → 리소스 .py, lupdate와 lrelease는 번역 추출과 배포를 담당합니다.
설치와 버전 호환을 먼저 체크하고, 각 도구의 옵션과 주의점을 흐름대로 익히면 빌드 자동화와 팀 협업도 훨씬 수월해집니다.
아래 목차를 기준으로 필요한 부분부터 차근차근 살펴보세요.



🧩 PySide6 설치와 버전 선택 가이드

PySide6는 Qt for Python의 공식 바인딩으로, 데스크톱 GUI를 파이썬으로 개발할 때 표준처럼 활용됩니다.
작업을 안정적으로 진행하려면 파이썬 버전, 가상환경, PySide6와 부가 패키지의 조합을 먼저 정리하는 것이 핵심입니다.
이 섹션에서는 설치 순서, 권장 버전 고정 방법, 설치 확인 포인트를 한 번에 정리합니다.

🧰 환경 준비 체크리스트

  • 🐍Python 3.8 이상 설치 여부 점검.
    3.10~3.12 구간을 많이 사용합니다.
  • 📦프로젝트별 가상환경 사용 권장: venv 또는 conda.
  • 🧩GUI 도구 사용 시 Qt DesignerQt Linguist도 함께 준비.
    (Pyside6 패키지 설치와 함께 제공되는 pyside6-designer, pyside6-linguist 실행 파일을 사용합니다.)

⬇️ 설치 명령과 버전 고정

기본 설치는 pip로 진행합니다.
필요한 핵심 구성은 PySide6(런타임과 위젯), shiboken6(바인딩 런타임), 그리고 프로젝트에 따라 PySide6-Addons(디자이너/리소스 도구 등) 까지 포함합니다.
안정적인 재현을 위해 버전을 명시해 고정하는 습관이 좋습니다.

CODE BLOCK
# (권장) 가상환경 생성
python -m venv .venv
# Windows
.venv\Scripts\activate
# macOS/Linux
source .venv/bin/activate

# 기본 설치
pip install --upgrade pip
pip install "PySide6==6.*" "shiboken6==6.*" "PySide6-Addons==6.*"

# 설치 가능한 버전 확인 (선택)
python -m pip index versions PySide6

💡 TIP: CI/CD나 팀 프로젝트에서는 requirements.txt 또는 pyproject.toml로 버전 범위를 고정해 환경 재현성을 확보하세요.
예: PySide6>=6.6,<6.8

🔍 설치 확인과 실행 파일 위치

설치가 끝나면 버전과 실행 파일이 정상 인식되는지 확인합니다.
아래 명령으로 파이썬과 PySide6 버전을 출력해 호환을 점검하세요.
또한 pyside6-uic, pyside6-rcc, lupdate, lrelease 등의 실행 파일이 가상환경의 Scripts(Windows) 또는 bin(macOS/Linux) 경로에 배치됩니다.

CODE BLOCK
# PySide6 및 Python 버전 출력
python -c "import PySide6, sys; print('PySide6:', PySide6.__version__); print('Python:', sys.version)"

# 주요 도구 버전/위치 확인
pyside6-uic --version
pyside6-rcc --help
lupdate -version
lrelease -version

# 실행 파일 경로 확인 (Windows)
where pyside6-uic
# 실행 파일 경로 확인 (macOS/Linux)
which pyside6-uic

⚠️ 주의: 시스템에 여러 버전의 파이썬이 설치된 경우, 활성화된 가상환경의 pippython이 같은 위치를 참조하는지 확인하세요.
경로가 섞이면 모듈은 설치되는데 실행 파일이 인식되지 않는 상황이 발생할 수 있습니다.

여기까지 정리한 설정을 통해 PySide6를 안정적으로 설치하고, 이후 단계에서 사용할 pyside6-uic(.ui → .py), pyside6-rcc(.qrc → 리소스 .py), lupdate/lrelease(번역) 도구를 문제 없이 호출할 수 있는 준비를 마칠 수 있습니다.

🧱 pyside6-uic 사용법 .ui를 .py로 변환

PySide6의 pyside6-uic는 Qt Designer에서 제작한 .ui 파일을 파이썬 코드로 변환하는 도구입니다.
이 변환 과정을 통해 직접 UI를 코드로 작성하지 않아도 되며, 복잡한 레이아웃이나 위젯 구성을 GUI 에디터에서 시각적으로 완성한 후 그대로 파이썬 애플리케이션에 통합할 수 있습니다.

🖥️ 기본 변환 명령 구조

명령어 형식은 매우 단순합니다.
Qt Designer로 만든 mainwindow.ui 파일을 파이썬 코드로 변환할 때는 아래와 같이 실행합니다.

CODE BLOCK
# .ui → .py 변환
pyside6-uic mainwindow.ui -o ui_mainwindow.py

변환된 ui_mainwindow.py 파일에는 Qt 위젯 클래스의 초기화 코드가 자동으로 생성됩니다.
이 파일을 직접 수정하기보다는 별도의 메인 로직 파일에서 상속하거나 조합하여 사용하는 것이 일반적인 방식입니다.

📂 생성된 코드의 기본 구조

아래는 변환된 .py 파일의 기본 형태입니다.
모든 위젯 정의가 자동으로 생성되어 있으며, UI 레이아웃 변경 시 다시 변환하여 덮어쓰면 됩니다.

CODE BLOCK
# ui_mainwindow.py (자동 생성 예시)
from PySide6.QtWidgets import QMainWindow, QWidget, QPushButton
from PySide6.QtCore import QMetaObject

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(400, 300)
        self.centralwidget = QWidget(MainWindow)
        self.pushButton = QPushButton("확인", self.centralwidget)
        MainWindow.setCentralWidget(self.centralwidget)
        QMetaObject.connectSlotsByName(MainWindow)

이 코드는 UI 구성을 그대로 반영합니다.
UI 파일을 수정한 뒤 다시 변환하면 기존 파일이 덮어쓰기 되므로, 별도의 main.py 파일에서 상속 구조로 연결하는 것이 안전합니다.

🔗 실제 프로젝트 연결 예시

다음은 변환된 ui_mainwindow.py를 불러와 실제 앱으로 구동하는 예시입니다.

CODE BLOCK
# main.py
from PySide6.QtWidgets import QApplication, QMainWindow
from ui_mainwindow import Ui_MainWindow

class MainWindow(QMainWindow, Ui_MainWindow):
    def __init__(self):
        super().__init__()
        self.setupUi(self)
        self.pushButton.clicked.connect(self.on_click)

    def on_click(self):
        print("버튼이 클릭되었습니다!")

if __name__ == "__main__":
    app = QApplication([])
    window = MainWindow()
    window.show()
    app.exec()

💡 TIP: ui 파일을 자주 수정한다면, makefile이나 Python 스크립트를 활용해 pyside6-uic 변환을 자동화하면 매우 편리합니다.

⚠️ 주의: 변환된 파일을 수동으로 수정하지 마세요.
UI가 변경될 때마다 변환 시 수정 내용이 사라집니다.
로직은 별도의 파일에서 처리해야 합니다.



🗂️ pyside6-rcc로 .qrc 리소스를 파이썬 모듈로

Qt 프로젝트에서는 이미지, 아이콘, 스타일시트 같은 정적 자원을 .qrc 파일로 관리합니다.
이 파일은 리소스 경로를 하나로 묶어 빌드 시 자동 포함할 수 있게 하는 설정용 XML입니다.
PySide6에서는 이 .qrc를 파이썬 코드로 변환하기 위해 pyside6-rcc 도구를 사용합니다.

📦 .qrc 파일 기본 구조

.qrc 파일은 XML 형식으로 작성하며, 프로젝트 내의 리소스 파일들을 그룹 단위로 지정합니다.
아래는 예시 구조입니다.

CODE BLOCK
<!DOCTYPE RCC>
<RCC version="1.0">
  <qresource prefix="/icons">
    <file>icons/app_icon.png</file>
    <file>icons/open.png</file>
  </qresource>
</RCC>

여기서 prefix는 런타임에서 리소스를 불러올 때의 논리 경로 역할을 합니다.
예를 들어 위 예시에서는 :/icons/app_icon.png 식으로 접근할 수 있습니다.

⚙️ 변환 명령과 생성 예시

.qrc 파일을 파이썬 코드로 변환하려면 아래 명령을 사용합니다.
결과 파일은 프로젝트 내부에 포함되어 다른 코드와 함께 실행됩니다.

CODE BLOCK
# .qrc → 리소스 .py 변환
pyside6-rcc resources.qrc -o resources_rc.py

이제 resources_rc.py 파일이 생성됩니다.
이 파일은 실행 시 자동으로 리소스를 등록하여 QIcon, QPixmap 등의 클래스에서 경로를 바로 참조할 수 있습니다.

🖼️ 리소스 적용 예제

아래 예시는 변환된 리소스 파일을 실제 버튼 아이콘으로 적용하는 간단한 예제입니다.

CODE BLOCK
# main.py
from PySide6.QtWidgets import QApplication, QPushButton
from PySide6.QtGui import QIcon
import resources_rc  # pyside6-rcc로 생성된 파일

app = QApplication([])
button = QPushButton("열기")
button.setIcon(QIcon(":/icons/open.png"))
button.show()
app.exec()

이처럼 리소스 경로를 :/ 접두사로 지정하면 외부 파일 없이도 배포할 수 있습니다.
이미지·아이콘이 실행 파일 내부에 포함되므로 관리가 훨씬 간결해집니다.

💡 관리 팁

  • 📁리소스 폴더 구조를 명확히 유지하세요. icons, qml, styles 등 용도별로 구분하면 좋습니다.
  • 🔄리소스 변경 시 반드시 pyside6-rcc를 재실행해야 반영됩니다.
  • 🚀빌드 스크립트에 변환 명령을 포함해 자동화하면 생산성이 크게 향상됩니다.

💡 TIP: 리소스를 직접 import하지 않아도 import resources_rc만으로 자동 등록됩니다.
실행 시 에러가 난다면 경로나 prefix 설정을 먼저 점검하세요.

🌐 lupdate·lrelease 번역 워크플로 설정

PySide6는 Qt의 강력한 국제화(i18n) 시스템을 그대로 지원합니다.
lupdatelrelease는 이 번역 시스템의 핵심 도구로, 소스 코드에서 문자열을 추출하고 번역 파일을 생성하는 역할을 합니다.
이 과정을 이해하면 다국어 애플리케이션을 간단히 구현할 수 있습니다.

🗣️ 번역 워크플로 개요

기본적인 흐름은 다음과 같습니다.

  • 🔍lupdate 명령으로 코드에서 번역 대상 문자열을 추출하여 .ts 파일 생성
  • 📝Qt Linguist를 사용하여 각 언어에 대한 번역 입력
  • 📦lrelease로 번역 파일을 컴파일해 실행 가능한 .qm 파일 생성
  • 🌍PySide6 앱에서 QTranslator로 .qm 파일을 로드

🧩 lupdate로 번역 파일 생성

소스 코드에서 문자열을 추출하려면 먼저 번역할 텍스트를 self.tr() 또는 QCoreApplication.translate()로 감싸야 합니다.
그 후 아래 명령으로 .ts 파일을 생성합니다.

CODE BLOCK
# 번역 파일 생성
lupdate main.py -ts translations/ko.ts

생성된 ko.ts 파일은 XML 기반으로, Qt Linguist에서 편집할 수 있습니다.

🪄 lrelease로 컴파일하기

모든 번역을 완료한 후 lrelease 명령으로 .qm 파일을 생성합니다.
이 파일은 애플리케이션이 실제 실행 시 사용하는 이진 번역 데이터입니다.

CODE BLOCK
# .ts → .qm 변환
lrelease translations/ko.ts

생성된 ko.qm 파일은 애플리케이션 내에서 QTranslator로 불러옵니다.

🌍 QTranslator 적용 예시

CODE BLOCK
# main.py
from PySide6.QtWidgets import QApplication, QLabel
from PySide6.QtCore import QTranslator, QLocale, QLibraryInfo

app = QApplication([])

translator = QTranslator()
translator.load("translations/ko.qm")
app.installTranslator(translator)

label = QLabel(app.translate("MainWindow", "Hello World"))
label.show()

app.exec()

이제 앱의 텍스트가 한국어 번역 버전에 따라 자동 변경됩니다.
여러 언어 버전을 동시에 관리할 수도 있으며, 실행 중 언어를 변경하는 것도 가능합니다.

💡 TIP: 다국어 프로젝트에서는 translations 폴더 구조를 언어별로 구분하고, Makefile이나 자동 스크립트에 lupdate/lrelease 명령을 통합하면 관리가 훨씬 간결해집니다.



🚀 실무 자동화와 베스트 프랙티스

PySide6 프로젝트를 실무에서 다루다 보면 UI, 리소스, 번역 파일을 수동으로 변환하는 일이 잦습니다.
이 작업은 단순하지만 자주 반복되므로, 자동화 스크립트를 만들어두면 효율이 크게 올라갑니다.
또한 빌드 환경, 패키징, 배포까지 고려하면 도구들의 통합 관리가 프로젝트 품질을 좌우합니다.

🧠 자동 변환 스크립트 예시

아래는 ui, qrc, ts 파일 변환을 한 번에 처리하는 Python 스크립트 예시입니다.
프로젝트 루트에 저장한 뒤 실행하면 일괄 변환이 가능합니다.

CODE BLOCK
import os
import subprocess

def convert_ui():
    for file in os.listdir("ui"):
        if file.endswith(".ui"):
            src = os.path.join("ui", file)
            dst = os.path.join("ui", f"ui_{file.replace('.ui', '.py')}")
            subprocess.run(["pyside6-uic", src, "-o", dst])
            print(f"✅ Converted: {src} → {dst}")

def convert_qrc():
    for file in os.listdir("resources"):
        if file.endswith(".qrc"):
            src = os.path.join("resources", file)
            dst = os.path.join("resources", f"{file.replace('.qrc', '_rc.py')}")
            subprocess.run(["pyside6-rcc", src, "-o", dst])
            print(f"✅ Compiled: {src} → {dst}")

def update_translations():
    subprocess.run(["lupdate", ".", "-ts", "translations/ko.ts"])
    subprocess.run(["lrelease", "translations/ko.ts"])
    print("🌍 Translations updated!")

if __name__ == "__main__":
    convert_ui()
    convert_qrc()
    update_translations()

이 스크립트는 한 번의 실행으로 UI 변환 → 리소스 변환 → 번역 파일 갱신까지 자동 처리합니다.
CI/CD 환경에서도 쉽게 통합할 수 있으며, 파일 경로를 자유롭게 커스터마이징할 수 있습니다.

🧩 디렉터리 구조 권장안

파일을 효율적으로 관리하려면 다음과 같은 폴더 구조를 추천합니다.

폴더명 용도 설명
ui/ Qt Designer로 만든 .ui 파일 저장
resources/ 이미지, 아이콘, .qrc 및 변환된 _rc.py 저장
translations/ .ts와 .qm 번역 파일 보관
src/ 실제 프로그램 로직이 담긴 코드

📦 배포 시 주의사항

PyInstaller나 Nuitka를 사용해 실행 파일로 패키징할 때는 리소스 경로.qm 파일이 포함되도록 명시해야 합니다.
특히 리소스가 import resources_rc 형태로 등록되어 있더라도, –add-data 옵션으로 실제 파일을 지정하지 않으면 누락될 수 있습니다.

⚠️ 주의: 번역 파일(.qm)은 실행 시 외부에서 로드되므로, 빌드 시 누락되지 않게 패키징 스크립트에 포함시켜야 합니다.

💡 TIP: CI/CD 파이프라인에서 pyside6-uicpyside6-rcc 변환을 자동으로 수행하면, UI나 리소스 변경이 있을 때마다 수동 작업을 줄이고 팀 간 버전 불일치 문제를 방지할 수 있습니다.

자주 묻는 질문 FAQ

PySide6와 PyQt6의 차이는 무엇인가요?
PySide6는 Qt 공식팀이 개발한 Qt for Python이며 LGPL 라이선스를 사용합니다.
반면 PyQt6는 Riverbank Computing이 개발한 상용/오픈소스 이중 라이선스 구조로 상업적 사용 시 유료가 될 수 있습니다.
기능은 거의 동일하나 PySide6가 공식 지원이므로 유지보수 면에서 유리합니다.
Qt Designer는 별도로 설치해야 하나요?
PySide6 설치 시 함께 포함된 pyside6-designer를 그대로 사용할 수 있습니다.
명령줄에서 pyside6-designer를 입력하면 GUI 에디터가 실행됩니다.
pyside6-uic 변환 시 경로 오류가 발생합니다.
경로에 공백이 포함되었거나, 가상환경이 활성화되지 않았을 때 발생할 수 있습니다.
venv를 활성화한 뒤 절대경로를 지정하면 해결됩니다.
.qrc 파일을 수정했는데 아이콘이 갱신되지 않습니다.
.qrc를 변경한 뒤 pyside6-rcc를 다시 실행해야 변경 내용이 반영됩니다.
자동 빌드 스크립트에 포함시키는 것이 가장 안정적인 방법입니다.
lupdate 명령이 인식되지 않습니다.
일부 OS 환경에서는 PATH가 자동 등록되지 않습니다.
PySide6/bin 경로를 직접 PATH에 추가하거나, 전체 경로를 지정해 실행하세요.
번역 문자열이 실행 시 반영되지 않습니다.
QTranslator를 생성하고 app.installTranslator()를 호출했는지 확인하세요.
또한 self.tr() 함수로 문자열을 감싸야 번역이 적용됩니다.
PyInstaller로 배포 시 리소스가 누락됩니다.
–add-data 옵션으로 리소스 경로를 포함시켜야 합니다.
예시: –add-data “resources;resources”
PySide6 버전을 업그레이드해도 기존 프로젝트가 깨지지 않을까요?
6.x 버전 내에서는 대부분 호환됩니다.
하지만 uic 변환 구조나 QResource 처리 방식이 미묘하게 달라질 수 있으므로, 새 버전 적용 시에는 반드시 테스트 후 배포하는 것이 좋습니다.

🧭 PySide6 개발 효율을 높이는 실무 요약

PySide6는 파이썬 개발자에게 Qt 기반 GUI를 손쉽게 구현할 수 있는 강력한 도구입니다.
이 글에서는 설치와 버전 관리부터 pyside6-uic, pyside6-rcc, lupdate, lrelease 등 필수 커맨드의 실제 사용법을 정리했습니다.
각 도구의 역할을 구분하고 자동화 스크립트까지 구성하면, GUI 프로젝트의 유지보수가 훨씬 간결해집니다.

핵심은 다음 세 가지입니다.
첫째, PySide6 버전과 파이썬 버전 호환을 명확히 유지할 것.
둘째, .ui·.qrc·.ts 파일 변환을 자동화하여 생산성을 극대화할 것.
셋째, QTranslator를 활용해 다국어 지원 구조를 초기에 설계할 것.
이 세 가지 원칙만 지켜도 프로젝트 관리가 훨씬 체계적으로 바뀝니다.

PySide6는 데스크톱 애플리케이션을 넘어서, 임베디드 시스템·툴킷·내부 관리 도구 등 다양한 분야에서도 활용되고 있습니다.
지속적인 업데이트를 통해 안정성과 기능이 강화되고 있으므로, 공식 문서와 릴리즈 노트를 주기적으로 확인하는 습관도 함께 가져가면 좋습니다.


🏷️ 관련 태그 : PySide6, QtforPython, pyside6-uic, pyside6-rcc, lupdate, lrelease, QtDesigner, GUI개발, Python프로젝트, 번역자동화