Pythonbrew環境下にPySideをインストールしようとしたらはまった
はじめに
PySideとはGUIライブラリであるQtのpythonバインディングです。兄弟にPyQtというのがいて、PyQtの技術要件にノキアが納得できなくなったからPySideを開発したとかなんとかいろいろ経緯があるようですけど、基本的に似たようなものとおもっていいと思います。PySideのほうがライセンスがゆるいです。(PyQtはGPL、PySideはLGPL)
そういえば今年のPyCon JPでは PyQtではじめるGUIプログラミング なんてのがあるらしいですね。PyCon行きたかった…。
あと、PySideとPyQtの違いについてはこちら。
PySideとPyQtの差異 - None is None is None
さて、ただUbuntuにPySideをインストールするだけなら
sudo apt-get python-pyside
とするだけ。が、システム環境内のsite-packagesに入れたくないからPythonbrew使ってるわけなので、この方法は個人的に求めてる方法ではありません。--no-site-packagesオプション付きのvirtualenv環境も同様だと思います。なんせpipだと入らないっぽいので。
pip install PySideだと失敗する
pip install PySideだと「setup.pyがねえよ」って言われる。
$ pip install PySide Downloading/unpacking PySide Downloading pyside-0.1.4.5.tar.bz2 (620Kb): 620Kb downloaded Running setup.py egg_info for package PySide Traceback (most recent call last): File "<string>", line 14, in <module> IOError: [Errno 2] No such file or directory: '/home/kk6/build/PySide/setup.py' Complete output from command python setup.py egg_info: Traceback (most recent call last): File "<string>", line 14, in <module> IOError: [Errno 2] No such file or directory: '/home/kk6/build/PySide/setup.py' ---------------------------------------- Command python setup.py egg_info failed with error code 1 Storing complete log in /home/kk6/.pip/pip.log
ググったり人に聞いてみたりした
その節はお手数かけました>@wozozo
で、教えてもらったStack OverflowのページはPyQtに関する質問だったんだけど、PyQtではsetup.pyの代わりにconfigure.pyというものがあるらしい。で、configure.pyについて調べてたりしてたら最終的に以下のようなビルドスクリプトをgithubで発見した。
BuildScripts下準備
これがちょー簡単で、READMEの通りに実行するだけ。
$ git clone git:git://github.com/PySide/BuildScripts.git
$ cd BuildScripts
$ git submodule init
$ git submodule update
まずgithubから一式git cloneします。するとBuildScriptsというフォルダがホームに出来てるのでフォルダ内に移動して init と update をします。
で、OSに合わせてdependencies.xxxxxxx.shを実行。
$ sudo ./dependencies.ubuntu.sh
Mac OS XでHomebrew使ってる場合は
$ sudo ./dependencies.osx.sh
らしい。マカーじゃないからよくわかりませんが。
あと、Mac OS X の場合「dependenciesはC++ toolchainやQtライブラリをインストールしてくれないので、手動でXcodeとQt SDKをインストールしないといけません」とか書いてます。
build and install
$ ./build_and_install
でビルド。うちの環境だと1,2時間はかかったと思います…
ビルドできたら
buid_and_installでビルドが終了すると$HOMEにpkgというフォルダが出来ているので、pathを通せば使えるようになります。
ただしLD_LIBRARY_PATHが設定されてないと「ImportError: libpyside-python2.7.so.1.0: cannot open shared object file: No such file or directory」と言われてしまうので注意。(最初PYTHONPATHにpkg/pyside-sandbox/lib/python2.7/site-packagesだけを設定したらこうなった)
PATHの設定はBuilding_PySide_on_Linux | Qt Wiki | Qt Developer Networkを参考にしました。
export PYSIDESANDBOXPATH=$HOME/pkg/pyside-sandbox export PATH=$PYSIDESANDBOXPATH/bin:$PATH export PYTHONPATH=$PYSIDESANDBOXPATH/lib/python2.7/site-packages:$PYTHONPATH export LD_LIBRARY_PATH=$PYSIDESANDBOXPATH/lib:$LD_LIBRARY_PATH export PKG_CONFIG_PATH=$PYSIDESANDBOXPATH/lib/pkgconfig:$PKG_CONFIG_PATH # set -DENABLE_ICECC=1 if you're using the icecream distributed compiler alias runcmake='cmake .. -DCMAKE_INSTALL_PREFIX=$PYSIDESANDBOXPATH -DCMAKE_BUILD_TYPE=Debug -DENABLE_ICECC=0'
これでちゃんとインポートできるようになった。
Python 2.7.2 (default, Aug 13 2011, 01:25:10) [GCC 4.5.2] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import PySide >>> PySide.__version__ '1.0.3'
実は最初、PATHの設定でtypoしてたのに気づかなくてPATHが通らなかったのでPythonbrew環境のPython2.7のsite-packagesにPySideフォルダを直接放りこんで無理やり動かしたのはここだけの秘密。