カテゴリー別アーカイブ: Python

pythonbrewの今後とpythonz

pythonbrewをつくってみてはや1年と半年。思った以上のひとにWatchされ思った以上のひとに使われているみたいです。
Pythonのインストールが面倒くさいと思っている方や元々RVMやperlbrewを使っていた方々からの反応はわりと良かったように思います。

そんなpythonbrewですが、ずいぶん前から開発が滞っていて半ば放置気味になっています。

理由はいくつかありますが、ざっくり言うと開発に割く時間がなくなりました。

そんな中つい先日、pythonzという類似のプロジェクトが出来た模様です。
pythonbrewをForkしたものということで、一部機能は削いでいるようですが、PyPyのインストールをサポートしていたりpythonbrewにはない機能もあるようです。
今後はこちらがデファクトになっていくのではないかと期待を込めつつご紹介します。

pythonbrewの今後ですが、たまに手直しをすることはあるかもしれませんが、積極的に更新は行わない予定です。
プルリクエストを頂いた場合は、わざわざ時間を割いて開発をしてくれたという気持ちも申し訳ないですし、出来るだけ反映していこうと思います。

PyQtでつくったアプリのパッケージングとインストーラの作り方

ここ最近、PyQtを使って以前公開した株価取得ライブラリのGUI化をやってたら思いの外楽しかったのだけど、インストーラーとかパッケージングとかそのあたりがまあ面倒くさくてまあダルい。
ごにょごにょいろいろ試してようやく動くっぽくなったので忘れないうちに書くけれども、深い理解まで至っていないので間違いがあるかも。
MacとWindowsの両方。
実行環境は、Mac OSX 10.6.8とWindows7。
Pythonのバージョンは2.7.2。当初は3.2でいこうとしていたのだけど、使用ライブラリが3系に未対応だったので2.7.2。

作ったアプリ

ある銘柄の指定期間の株価(当日の高値, 安値, 終値, 出来高)をcsv形式でファイルに書き出すツール。

Mac版はこちら
Windows版はこちら

ソースコードはこちら

レジストリとかは未使用。
SnowLeopardだと微妙にうまく動かないかもしれない。Lionでは問題なし。
QCalendarWidgetを使うと落ちるような。謎。

Mac

使ったもの:py2app

py2appは、フツウにeasy_installもしくはpipからインストール。
サンプルをそのまま実行したら以下のようなエラーが出た。

error: argv-emulation is not supported for 64-bit executables

argv-emulationが何の役割を果たしているのかはよく分かっていないのだけど、いろいろごにょごにょやったあげく最終的にsetup.pyのargv_emulationをFalseにして逃げた。
当初は、universalなPythonだったりQtだったりをインストールして32-bit版で動かそうとしてみたのだけど、まーどうにもうまく動かなかったので諦め。

他はとくに問題なくドキュメント通りにsetup.pyを作成して以下のコマンドを叩いたらパッケージングされた。

$ python setup.py py2app

参考ソース:setup.py

Windows

使ったもの:py2exe, innosetup

py2exeはこのあたりからインストーラをダウンロードしてきてインストール。
innosetupはまずこのあたりから本家をダウンロードしてきてインストール。
手元の環境では、isetup-5.4.2.exeを入れた。
そのあとこのあたりからpywin32をダウロードしてきてインストール。
最後にここからinnosetupのzipをダウンロードしてきて解凍して中身(innosetup.py)を作業ディレクトリに置いた。

こちらもサンプルをそのまま実行するだけではうまく行かず、手元の環境ではinnosetup.pyの794行目あたりのBOMを付けてる部分がどうやら悪さをしているようで、そいつをコメントアウトしたら動作した。
innosetupのChangeLogを見ると0.6.3からBOMをつけてるっぽいのだけど、理由は不明。
コメントアウトしたソースはこちら

あとはサンプル通りにsetup.pyを書いて以下のコマンドを実行するとsetup.exeが作成された。

> c:\Python27\python.exe setup.py innosetup

参考ソース:setup.py

おしまい

簡単そうに見えたのだけど意外とハマりどころが多かったし、ただ単にパッケージングとsetup.exeを作成するだけで1日かかってしまった。
深く理解するとしたらもっとずっとかかると思われる。
クロスプラットフォームなアプリは簡単にかけて良いのだけど、パッケージングの方法がそれぞれ異なるので、なにかと面倒に感じてしまった。

参考

PyQt でクロスプラットフォームなデスクトップアプリケーションを — Kosei Kitahara's Blog
How-to: Deploying PyQt applications on Windows and Mac OS X

PyQtの環境づくり + MacOSX

PyCon JP 2011のセッションで見かけた「PyQtではじめるGUIプログラミング / Tutorial: GUI Programming with PyQt」がとっても良かったので、さっそくPyQtやろうと思って、Macで環境づくりした。

前提

homebrewpythonbrewがインストールされているMac。
homebrewだけでいける気がするけど、どうせだからpythonbrewのとこに入れてみる。

PyQt

Python3.2.1のインストール。

$ pybrew install -nv -j4 --framework 3.2.1
$ pybrew switch 3.2.1

Qtのインストール。

$ brew install qt

PyQtの前にSIPのインストール。

$ wget http://www.riverbankcomputing.com/static/Downloads/sip4/sip-4.12.4.tar.gz
$ tar zxvf sip-4.12.4.tar.gz
$ cd sip-4.12.4
$ python configure.py
$ make
$ make install

PyQtのインストール。

$ wget http://www.riverbankcomputing.com/static/Downloads/PyQt4/PyQt-mac-gpl-4.8.5.tar.gz
$ tar zxvf PyQt-mac-gpl-4.8.5.tar.gz
$ cd PyQt-mac-gpl-4.8.5
$ python configure.py
$ make -j4
$ make install

Qtのドキュメント

homebrewでqtをインストールしたときに一緒に入るっぽい。Assistant.appとかDesigner.appとか。

とりあえずホームディレクトリのApplicationsにAssistant.appのリンクを作って、それを起動する形にした。

$ cd ~/Applications/
$ ln -s /usr/local/Cellar/qt/4.7.3/bin/Assistant.app Assistant.app

おしまい

ひさびさのGUI。PyQtなにかと楽でいいわあ。

株価や財務情報を取得するツール 2

株価取得ツールのjsmをバージョン0.2に更新した。

今回の更新では、APIの整理と少しのバグ修正を行った。APIの整理をしたことで多少は使い勝手がよくなったと思われる。

今までは取得対象ごとにクラスのインスタンスを作成してメソッドを呼び出す形だったのだけれども、今回の修正でインスタンスの作成は1度きりで良くなって、そのインスタンスが全てのデータにアクセスできる形になった。

before:

from jsm.quotetoday import QuoteToday
from jsm.finance import Finance
q = QuoteToday()
q.get(4489)
f = Finance()
f.get(4489)

after:

import jsm
q = jsm.Quotes()
q.get_price(4489)
q.get_finance(4489)

Facadeパターンを適用したみたいな。
厳密に正しいか分からんけど。

そんな感じ。