안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.
코딩유치원에서는 파이썬 기초부터 사무자동화, 웹크롤링, 데이터 분석, 머신러닝 등의 다양한 패키지까지 초보자도 알기 쉽도록 내용을 정리해 놓았습니다.
업무는 물론 투자에도 도움이 될만한 전자공시시스템(DART)나 텔레그램(Telegram) 관련 패키지도 배울 수 있으니 많은 관심 부탁드립니다.
저는 사용자 친화적인 프로그램을 만들기 위해서 지금까지 파이썬 GUI(Graphical User Interface) 라이브러리 중 가장 유명한 pyqt5를 사용해왔습니다.
<PyQT 관련 글>
2021.05.08 - [파이썬 패키지/GUI 프로그램] - [파이썬 GUI 프로그래밍] PyQt5 기초_2강.위젯의 종류, 시그널과 슬롯, 이벤트 루프
2021.05.10 - [파이썬 패키지/GUI 프로그램] - [파이썬 GUI 프로그래밍] PyQt5 기초_3강.Qt Designer로 내마음대로 GUI 구성하기
2021.05.22 - [파이썬 패키지/GUI 프로그램] - [파이썬 GUI 프로그래밍] 잡플래닛 리뷰 정보 크롤링 GUI 프로그램
하지만, 아주 유용하면서도 직관적인 PyQt이지만 중대한 단점이 존재합니다. (단점이 개인적인 의견일 수 있음)
1. PyQt의 단점
GPL 라이브러리, 즉 오픈소스 프로그램을 위한 라이선스라는 것입니다. 이 말이 무슨말이냐면 상업용으로 프로그램을 제작했을 때 그 코드를 공개하고 누구나 마음껏 사용할 수 있다는 말입니다. 만약 그러고 싶지 않다면 별도의 라이선스를 구매해야하죠.
아마 상업용 프로그램을 개발해서 판매/배포하는 분들에게 중요한 문제가 아닐까 싶습니다.
이런 문제를 해결해줄 수 있는 라이브러리가 바로 PySide입니다.
2. PySide6란?
PySide란 Qt의 공식적인 파이썬 바인딩, 즉 C++ 기반의 GUI 프로그램 프레임워크인 Qt를 Python에서 사용할 수 있도록 잘 포장(?)한 것입니다.
"어라? PyQT가 이름만 봐도 Qt의 공식 파이썬 바인딩인 아니었어?"라고 생각하셨을 것 같은데요.
사실 Qt를 제작한 회사(The Qt Company)가 아닌, 영국의 Riverbank Computing가 오픈 소스인 Qt를 이용해서 PyQt를 만들었던 것이라고 하네요.
GPL 기반의 PyQt를 Qt와 같은 LGPL로 변경할 것을 제안했으나 RC에서 거절함에 따라, 2016년 5월부로 원조인 Qt사에서 PySide를 공식 지원하겠다고 발표하였습니다. 여기서 Side란 핀란드어로 '바인딩'을 의미한다고 하네요.
PySide2까지만 해도 그 기능이 PyQt5에 비해서 뒤쳐졌지만 2020년 12월에 PySide6를 출시하면서, PyQt6와 거의 비슷한 수준까지 올라왔다고 합니다.
제가 아직 공부를 깊게 하진 못했지만 PyQt6와 거의 동일하며, 당연히 Qt Designer도 사용할 수 있습니다.
PySide2를 잘 정리해놓은 무료전자책이 있어 소개드립니다. 6는 아니지만 Pyside 개념을 잡는데에 많은 도움이 될 것 같아요.
https://wikidocs.net/book/2957
3. GPL vs LGPL
위에서 언급했던 공개 소프트웨어 라이선스의 두 가지 종류에 대해서 조금 더 자세히 알아보겠습니다.
1) GPL
기본적으로 어떤 프로그램을 개발할 때, GPL 코드를 일부라도 사용하게 되면 그 프로그램은 GPL이 됩니다. GPL을 가진 프로그램을 유료로 판매하는 것은 가능하지만, 반드시 전체 소스코드는 무료로 공개해야 합니다.
GPL 코드를 사용한 SW를 내부적인(개인, 기관, 단체 등) 목적으로만 사용할 때에는 소스코드를 공개할 필요가 없지만 어떤 형태로든(유료든 무료든) 외부에 공표/배포할 때에는 전체 소스코드를 공개해야 합니다.
2) LGPL
LGPL(Lesser General Public License)는 GPL보다 훨 씬 완화된 라이선스 방식입니다.
가장 큰 차이점은 LGPL 코드를 정적(static) 또는 동적(dynamic) 라이브러리로 사용한 프로그램을 개발하여 판매/배포할 경우에 프로그램의 소스코드를 공개하지 않아도 된다는 점입니다. LGPL 코드를 사용했음을 명시만 하면 된다고 하는데 어떻게 명시해야하는지는 아직 잘 모르겠네요.
여기서 주의할 점은, LGPL 코드를 단순히 이용하는 것이 아니라 이를 수정한 또는 이로부터 파생된 라이브러리를 개발하여 배포하는 경우에는 전체 코드를 공개해야 한다는 것입니다.
4. 동적 로드 라이브러리 vs 정적 라이브러리
세상에.. 공부하면 할 수록 모르는 것 투성이네요. 위에서 LGPL을 설명하면서 나왔던 정적, 동적 라이브러리에 대해서 잠시 다루어보겠습니다. 여기서 말하는 라이브러리는 함수, 구조체, 클래스 등을 포함하고 있는 컴파일된 파일을 의미합니다.
1) 정적 라이브러리(Static Library)
프로그램 빌드 시, 라이브러리를 실행 코드에 넣는 방식을 의미합니다. 이 방식의 장점은 별도 외부 파일이 필요없이 단일 어플리케이션으로 사용가능하다는 것이며, 단점은 로딩하는데에 무겁다는 것입니다.
확장자는 윈도우에서는 .lib이며, 리눅스에서는 .a입니다.
2) 동적 로드 라이브러리(Dynamic Load Library)
동적 로드 라이브러리는 쉽게 말해서 외부에 라이브러리 파일을 두고, 그때 그때 그 안의 내용물을 불러와서 사용하는 방식입니다. 그렇기 때문에 정적 라이브러리와 반대로 로딩이 빠른 대신에, 반드시 라이브러리 파일을 함께 배포해야 하는 불편함이 있습니다.
확장자는 윈도우에서는 .dll이며, 리눅스에서는 .so입니다.
<참고 자료>
1. [Python] PyQt와 PySide에 대한 잡설
https://dev-overload.tistory.com/44
2. [Python] QT 지원 | PYQT5 vs PySide2
3. [Software] 공개 SW 라이센스(GPL, LGPL, BSD)
http://jinyongjeong.github.io/2016/06/01/software_license/
4. 정적 라이브러리와 동적 라이브러리(Static Library, Dynamic Library)
https://m.blog.naver.com/kr_dukie27/10175747579
'파이썬 패키지 > GUI 프로그램' 카테고리의 다른 글
[Python/Pyqt5] QWidget, QMainWindow, Qdialog 차이 총정리 (ft. Modal과 Modeless) (0) | 2021.12.06 |
---|---|
[파이썬 GUI 프로그래밍] 잡플래닛 리뷰 정보 크롤링 GUI 프로그램 (2) | 2021.05.22 |
[파이썬 GUI 프로그래밍] PyQt5 기초_3강.Qt Designer로 내마음대로 GUI 구성하기 (0) | 2021.05.10 |
[파이썬 GUI 프로그래밍] PyQt5 기초_2강.위젯의 종류, 시그널과 슬롯, 이벤트 루프 (0) | 2021.05.08 |
[파이썬 GUI 프로그래밍] PyQt5 기초_1강.PyQt의 개념과 창 만들기 (창 이름, 사이즈, 변경 및 아이콘 삽입) (1) | 2021.05.07 |