반응형
PyInstaller를 사용하여 Python GUI 애플리케이션을 단일 실행 파일(.exe)로 패키징할 때,
PyQt5와 PyQt6 패키지가 동시에 감지되는 문제가 발생할 수 있습니다.
이 문제는 PyInstaller가 한 번에 하나의 Qt 바인딩만 지원하기 때문에 발생합니다.
📌 오류 메시지
Aborting build process due to attempt to collect multiple Qt bindings packages:
attempting to run hook for 'PyQt5', while hook for 'PyQt6' has already been run!
PyInstaller does not support multiple Qt bindings packages in a frozen application.
이 오류 메시지는 PyInstaller가 PyQt6를 먼저 감지했는데, PyQt5도 함께 감지되면서 충돌이 발생한 것입니다.
🔹 해결 방법
아래 방법 중 하나를 사용하여 문제를 해결할 수 있습니다.
✅ 1. PyQt5 제거 (권장)
현재 프로젝트에서 PyQt6를 사용하고 있다면 PyQt5를 제거하는 것이 가장 확실한 해결 방법입니다.
1️⃣ PyQt5 제거
터미널(또는 명령 프롬프트)에서 다음 명령어를 실행합니다:
pip uninstall PyQt5
제거가 완료되었는지 확인하려면 다음 명령을 입력하세요:
pip list
PyQt5가 목록에서 사라졌다면, PyInstaller를 다시 실행하세요:
pyinstaller.exe Main.py --onefile --noconsole
👉 만약 PyQt5를 제거할 수 없는 경우, 아래 방법을 사용하세요.
✅ 2. PyInstaller에서 PyQt5 제외하기
PyQt5를 제거할 수 없다면 PyInstaller 실행 시 PyQt5를 제외하도록 설정할 수 있습니다.
1️⃣ PyInstaller 실행 시 --exclude 옵션 사용
pyinstaller.exe Main.py --onefile --noconsole --exclude-module PyQt5
이렇게 하면 PyInstaller가 PyQt5를 무시하고 빌드를 진행합니다.
✅ 3. .spec 파일 수정 (고급 방법)
이미 Main.spec 파일이 생성된 경우, 이를 수정하여 PyQt5를 제외할 수도 있습니다.
1️⃣ Main.spec 파일 수정
- Main.spec 파일을 열고 Analysis 부분에 excludes=['PyQt5']를 추가하세요.
a = Analysis(
['Main.py'],
pathex=[],
binaries=[],
datas=[],
hiddenimports=[],
hookspath=[],
hooksconfig={},
runtime_hooks=[],
excludes=['PyQt5'], # PyQt5 제외
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher,
noarchive=False,
)
2️⃣ .spec 파일을 사용하여 빌드
이제 .spec 파일을 사용하여 PyInstaller 빌드를 실행합니다.
pyinstaller Main.spec
🔹 최종 정리
해결 방법설명실행 명령어
1. PyQt5 제거 (권장) | PyQt6만 사용하도록 PyQt5를 삭제 | pip uninstall PyQt5 |
2. PyInstaller에서 PyQt5 제외 | PyInstaller 실행 시 PyQt5를 제외 | pyinstaller Main.py --onefile --noconsole --exclude-module PyQt5 |
3. .spec 파일 수정 | Main.spec 파일을 수정하여 PyQt5 제외 | pyinstaller Main.spec |
🔹 결론
- PyQt6를 사용하는 프로젝트라면 PyQt5를 제거하는 것이 가장 깔끔한 해결 방법입니다.
- 만약 PyQt5를 제거할 수 없다면, PyInstaller 실행 시 --exclude-module PyQt5 옵션을 추가하면 됩니다.
- .spec 파일을 수정하는 방법도 있지만, 기본적으로 위의 두 방법이 더 쉽고 효과적입니다.
위 방법을 적용한 후 다시 실행해보세요.
문제가 지속되면 오류 메시지와 함께 다시 문의해주세요! 🚀
반응형