Qt wiki will be updated on October 12th 2023 starting at 11:30 AM (EEST) and the maintenance will last around 2-3 hours. During the maintenance the site will be unavailable.

PySide Shiboken Tutorial/ko

From Qt Wiki
Jump to navigation Jump to search
This article may require cleanup to meet the Qt Wiki's quality standards. Reason: Auto-imported from ExpressionEngine.
Please improve this article if you can. Remove the {{cleanup}} tag and add this page to Updated pages list after it's clean.

한국어 English

간단 Shiboken 바인딩 학습서.

이 글은 Shiboken을 이용해 C+의 파이썬 바인딩을 만드는 과정을 간단히 설명하고 있다. 원본은 Roman Lacko가 썼고, 여기서 확인할 수 있다. 참고로 이 글은 원본의 예제와 그 과정을 따를 뿐, 원본 설명을 그대로 번역한 것이 아니라, 몇몇 다른 작업 환경으로 인한 문제을 자유롭게 함께 설명했다.

  • FooLib 바인딩하려는 라이브러리 프로젝트
  • FooLibBinding 생성된 바인딩 소스를 담고 있는 프로젝트

사용한 소프트웨어:

Python 2.7은 MSVC2008, Python 3.3은 MSVC2010을 사용한다. 원본은 Python 2.7을 대상으로 하기 때문에 MSVC2008용을 사용하는 것이 맞지만, MSVC2010용을 사용한다. 그러면서 MSVC2010으로 해도 된다는 설명을 남기고 있다. 하지만 여기서는 Python 3.3을 대상으로 하기 때문에 MSVC2010용을 사용하는 것이다. 그리고 원본은 64bit지만 여기서는 32bit다.

Notes:

  • _FooLibBinding\FooLibBinding.pro_은 생성된 바인딩 소스로 파이썬 확장을 만들기 위한 프로젝트 파일인데, 파이썬의 include와 libs 경로를 자신의 환경에 맞도록 고쳐야 한다. 'C:27_64'라고 된 부분을 고치면 된다. Python 3.3을 기본 위치에 설치했다면, 'C:33' 으로 고치면 된다. 그리고 .lib 파일도 파이썬 버전마다 이름이 다르므로 맞게 고쳐야 한다.

추가로 바인딩하려는 FooLib.lib의 경우, Qt Creator 2.8.0으로 만들었는데, 빌드 기본 위치가 build-FooLib-Desktop-Release다. 그런데 자료에는 FooLib-build-Desktop-Release라고 되어 있다. 자신의 환경이 또다르다면 이 부분도 확인해 줘야 한다. 아래는 모두 수정한 것이므로 복사해서 해당하는 부분에 덮어쓰면 된다.

INCLUDEPATH''= ../pyside/include/PySide  ../pyside/include/PySide/QtCore  ../pyside/include/shiboken  c:/Python33/include  ../FooLib

LIBS += c:/Python33/libs/python33.lib  ../pyside/shiboken-python3.3.lib  ../build-FooLib-Desktop-Release/release/FooLib.lib
  • 바인딩을 생성하기 위해 Shiboken을 실행하는 부분이 FooLib\generate_binding.bat에 포함되어 있는데, 여기에는 설치된 Qt 라이브러리의 include 경로가 포함되어야 한다. 이 부분도 자신의 환경에 맞도록 고쳐야 한다.
    • 아래의 두 파일에서 "c:–4.8.4-msvc2010-x64"를 자신의 환경에 맞는 경로로 바꾸면 된다.
pyside\include\PySide\pyside_global.h
FooLib\generate_binding.bat
  • mingw를 사용할거라면 라이브러리의 확장자 .lib가 .a로 바뀌는 것에 주의해야 한다.

바인딩을 생성하고 테스트하기 위한 과정:

  1. PySide 설치
  2. _C:33\Lib\site-packages\PySide_을 _BindingTest\PySide_로 복사.

설치된 PySide를 연습 프로그램이 있는 곳으로 복사하라는 것인데, 이건 프로젝트가 PySide가 그곳에 있다고 가정하고 만들어졌기 때문이다. 실제로 복사를 하거나 아니면 ../PySide처럼 되어 있는 경로명을 모두 고쳐줘야 한다. 윈도우7이라면 관리자 모드로 _BindingTest_에 mklink /D PySide C:33\Lib\site-packages\PySide처럼 해서 링크를 만들어주는 방법이 깔끔하다.

  1. FooLib 프로젝트 컴파일

Qt Creator로 _FooLib\FooLib.pro_을 열어서 빌드하면 깔끔하게 된다. Qt Creator는 2.8.0 버전을 사용했다.

  1. FooLib\generate_binding.bat 실행

FooLib를 바인딩하는 소스를 만들어낸다. 내부적으로 Shiboken.exe를 호출한다.

  1. FooLibBinding 프로젝트 컴파일

앞서 생성한 소스를 포함해서 실제 파이썬 확장을 만들어 낸다.

  1. FooLibBinding\make_package.bat 실행

만들어진 확장 모듈과 그걸 실행하는데 필요한 파일들을 한 곳으로 모은다. 여기도 Qt Creator의 라이브러리 생성 위치가 다르게 된 곳이 있어 제대로 복사되지 않는 파일이 있으므로 아래 두 줄처럼 바로 잡아줘야 한다.

copy ..-FooLib-Desktop-Release\release\FooLib.dll packagecopy ..-FooLibBinding-Desktop-Release\release\FooLibBinding.dll package\foolib.pyd
  1. "package" 폴더로 이동해서 _foolib_test.py_을 실행시킨다.