PyQt vs PySide 차이점
PyQt와 PySide는 둘 다 C++ 기반의 Qt 프레임워크를 Python 용으로 바인딩한 것으로, 파이썬 기반으로 간단하게 데스크톱 GUI를 개발 할 수 있게 해준다.
또한 이 둘의 코드는 거의 99% 동일하다. 따라서 PyQt로 만든 코드는 간단한 몇 가지 수정만으로 PySide 용으로 그래도 사용 가능하며, 반대로도 마찬가지이다. OS 또한 대표적인 개발 OS인 Linux, Mac, Window에서 모두 사용 가능하다.
그렇다면 왜 다른 이름으로 이 두 가지 프레임워크가 공존하고 있는 것일까? 이 둘의 차이는 무엇일까?
개발사
PyQt는 RiveBank Computing에서 만든 프로그램이고, PySide는 The Qt Company에서 만든 프로그램이다.
본래 먼저 릴리즈된 쪽은 PyQt이며, 먼저 시장에서 보편적으로 사용되었다. 따라서 아마 둘 중 하나를 먼저 알게 되었다면 PyQt인 경우가 많을 것이다.
하지만 프레임워크 이름과 회사명을 보면, 오히려 원본인 Qt를 계승한 근본은 PySide 쪽이다. Qt 프로그램을 개발한 회사인 Qt사에서 직접 만든 프로그램인 것이다.
라이선스
그러면 이미 PyQt가 개발되어 상용되는 상황에서 PySide가 따로 개발된 이유는 무엇일까? 바로 라이선스 때문이다.
- PyQy의 라이선스는 GPL이다. GPL(General Public License)은 오픈소스 라이선스의 일종으로, 어떤 프로그램을 개발할 때 GPL 코드를 일부라도 사용하게 되면 해당 프로그램은 GPL이 된다. 또한 GPL을 가진 프로그램을 외부에 공개/배포할 때는 반드시 전체 소스 코드를 공개해야 한다. 즉 상업적인 프로그램의 경우, 다른 사람이 코드 일부를 수정 및 개선해서 판매하는 것이 가능한 것이다. (단, 개인 혹은 기관에서 내부적으로만 사용하고자 하면 코드를 공개할 의무 없이 그냥 사용하여도 된다.)
- 반면 PySide의 경우 LGPL(Lesser General Public License) 라이선스이다. 이름처럼 완화된 GPL 라이선스로, LGPL 코드를 라이브러리로 사용한 프로그램을 개발하여 판매/배포할 경우 소스코드를 공개하지 않아도 된다. 단지 LGPL 코드를 사용하였음을 명시하기만 하면 되는 것이다. 단, 만약 단순히 LGPL 라이브러리를 이용하는 것이 아니라, 이를 수정하거나 파생 라이브러리는 개발하여 배포하는 경우에는 반드시 전체 코드를 공개해야 한다.
따라서 PySide는 PyQt와 달리, Python에서 Qt 라이브러리를 코드 공개 없이 외부 배포 프로그램에 사용할 수 있으며, 이를 위해 개발되었다고 볼 수 있다.
코드
앞서 이야기 하였듯이 PyQt와 PySide의 코드는 대부분 동일하다. 만약 한쪽을 이미 사용할 줄 안다면, 다른 쪽을 익히기는 매우 쉬울 것이다. 이미 둘 중 하나로 작성된 코드가 있다면, 사소한 몇 가지를 변경하는 것만으로도 PyQt를 PySide로 혹은 PySide를 PyQt로 바꾸는 것이 가능하다.
바꿔야 한다면 아래 두 가지 정도만 대표적으로 차이가 나므로 관련된 부분을 찾아보면 쉽게 바꿀 수 있다.
- import 문
- 당연히 PyQt이면 PyQt를, PySide이면 PySide를 import 해야 한다.
- import 구문에 따른 함수들의 이름이나 매개변수가 일부 달라지곤 한다. 예시는 https://www.pythonguis.com/faq/pyqt6-vs-pyside6/ 등을 참고하길 바란다.
- 멀티 Thread
- PyQT에서는 스레드 수신자를 윈도 클래스에서 정하고 PySide에서는 스레드 수신자를 스레드 클래스에서 정한다. 구체적인 내용은 참고자료(https://dev-overload.tistory.com/44)를 참고하자.
지원 버전
위의 내용들을 보면 어차피 기능은 거의 동일하고 라이선스는 PySide가 더 완화되어 있다. 이를 보면 PyQt를 사용할 이유는 없고, PySide가 무조건 유리해 보인다. 이는 실제로 상당 부분 사실이므로 앞으로는 점점 PySide가 대세가 될 가능성이 높아 보인다. 하지만 PyQt가 먼저 개발 및 배포된 라이브러리이기 때문에, 지원 버전이 더 다양하다. 따라서 사용 환경에 따라서 오래된 환경들과 함께 사용하여야 한다면 PyQt가 필요할 수도 있다. 또한 개발 OS가 Sharp Zaurus일 경우,. PyQt만 가능하다.
또한 만약 Qt5 기반으로 작성하고자 하는 경우에는 PyQt5가, Qt6를 사용하고자 하는 경우에는 PySide6가 유리하다. PyQt는 6도 존재하지만 아직 Qt5에 집중해서 서비스 중이며, PySide의 경우 2와 6만 사용 가능하기 때문이다. 만약 새로 프로그램을 만들고자 하는 경우에는 더 최신 버전인 6 쪽이 지원 기능이 다양하고 구조가 단순해서 편리하다.
사실 둘의 코드의 차이가 크지 않기 때문에, 만약 헷갈린다면 편한 쪽으로 작성하고 문제가 될 때 다른 쪽으로 변경해도 큰 문제는 없을 것으로 보인다.