@ka2n

Technology and beer

PySideを使ってみる (OSX 10.9, Python3.3)

f:id:ka2nn:20140331103123p:plain

node-webkit - ka2n's blog

今やっている用途には向かなかったので結局PySideにした pip install PySideとかじゃ上手く行かなくて辛い。

$ python3 setup.py bdist_egg --version=1.2.1 --qmake=/opt/boxen/homebrew/Cellar/qt/HEAD/bin/qmake

時間かかりそうだしとりあえずこれを実行して寝る。


追記

失敗してた。1.2.1だとビルドできない。1.3.0devでできた。

$ python3 setup.py bdist_egg --qmake=/opt/boxen/homebrew/Cellar/qt/HEAD/bin/qmake --no-examples
$ eazy_install ./dist/PySide-1.3.0dev-py3.3-macosx-10.9-x86_64.egg
from PySide import QtGui

インポートがうまくいかない。ライブラリがロードされていないと言われる。 存在してるけど。

Traceback (most recent call last):
  File "main.py", line 4, in <module>
    from PySide import QtGui
ImportError: dlopen(/Users/user/.virtualenvs/myenv/lib/python3.3/site-packages/PySide-1.3.0dev-py3.3-macosx-10.9-x86_64.egg/PySide/QtGui.so, 2): Library not loaded: libpyside.cpython-33m.1.2.dylib
  Referenced from: /Users/user/.virtualenvs/myenv/lib/python3.3/site-packages/PySide-1.3.0dev-py3.3-macosx-10.9-x86_64.egg/PySide/QtGui.so
  Reason: image not found

PySide/pyside-setup · GitHub ここをよく見たらpyside_postinstall.py -installをする必要があった。書いてある通りにやれば動くから十分かな。でももっと楽にできると良い。こういうの好まないけど優秀な人はいるから。

main.py

# -*- coding: utf-8 -*-

import sys
from PySide import QtGui

def main():
    app = QtGui.QApplication(sys.argv)
    win = QtGui.QWidget()

    win.resize(320, 240)
    win.setWindowTitle("Hello")
    win.show()

    sys.exit(app.exec_())

if __name__ == '__main__':
    main()

f:id:ka2nn:20140331083724p:plain

なんでsetup.pyでできないのか後で調べる。


追記

pyside_postinstall.py -installでやっていること

  • 実行ファイル(shiboken,patchelf)に実行権限を追加
  • *.sopatchelfコマンドでrpathをセット

rpathってのはLDみたいなやつか。

PatchELF

PatchELF is a small utility to modify the dynamic linker and RPATH of ELF executables.

ELFってのは.soとかの事を指す(Wikipedia調べ)

.eggではインストール後にスクリプトを実行できないのかな. .eggのフォーマットを調べよう。そのうち。