エキスパートPythonプログラミングの6章やってみた。
ので自分用メモ。
この間virtualenvwrapperを導入したので~/.zshrcの抜粋から。
export WORKON_HOME=$HOME/work/python_virtual export PIP_DOWNLOAD_CACHE=$HOME/.pip_cache export PIP_RESPECT_VIRTUALENV=true #export PIP_REQUIRE_VIRTUALENV=true if [ -f ~/bin/virtualenvwrapper.sh ]; then . ~/bin/virtualenvwrapper.sh fi
開始。
% mkvirtualenv --no-site-packages Atomisator % cdvirtualenv % pip install nose % mkdir packages % cd packages % pip install PasteScript % pip install pbp.skels (5章で作るテンプレートを著者がpypiに上げたもの) % workon Atomisator (もっかいworkonしないとライブラリが読めなかった) % paster create -t pbp_package atomisator.parser Selected and implied templates: pbp.skels#pbp_package A namespaced package Variables: egg: atomisator.parser package: atomisatorparser project: atomisator.parser Enter namespace_package (Namespace package (like pbp)) ['pbp']: atomisator Enter package (The package contained namespace package (like example)) ['example']: parser Enter version (Version) ['0.1.0']: : (後はEnter) % cd atomisator.parser % python setup.py develop % nosetests --with-doctest --doctest-extension=.txt . ---------------------------------------------------------------------- Ran 1 test in 0.051s OK
このテストは足し算の計算してるだけなので通る。
ここで作るアプリケーションで使うパッケージをsetup.pyに書いておく。
install_requires=[ 'setuptools', 'feedparser', ★ # -*- Extra requirements: -*- ],
追加したパッケージを開発環境に入れる。
% python setup.py develop
で、テストを書いてテストすると
atomisator/parser/README.txt編集(p191) % nosetests --with-doctest --doctest-extension=.txt : Ran 1 test in 0.048s FAILED (failures=1)
テストにこけるので、テストが通るようにコードを書く、と。なるほど。
% cd atomisator/parser % wget http://bitbucket.org/tarek/atomisator/raw/c2e2e1af7c4b/packages/atomisator.parser/atomisator/parser/tests/sample.xml atomisator/parser/README.txt編集(p192) __init__.py編集(p192) atomisator/parser/README.txt編集(p193) % nosetests --with-doctest --doctest-extension=.txt
ってやってもこけるので何でかなーと思ったらdoctestのELLPSISが効いてないよう。
どうすればいいかは…カンニングした*1。http://vkgtaro.jp/2011/02/21/nosetest_with_doctest
>>> res = parse(os.path.join(os.path.dirname(__file__), 'sample.xml')) >>> res #doctest: +ELLIPSIS <itertools.islice ...>
これでテストが通るはず。
% nosetests --with-doctest --doctest-extension=.txt . ---------------------------------------------------------------------- Ran 1 test in 1.337s OK
通った。
本では次にatomisator.dbパッケージを作れと書いてあるんだが、なんでこんなに細かくパッケージを分けろと言っているのか、自分がいまいち理解できていない…
続きの章に書いてあったところもちょっとメモ。
作った関数をコンソールスクリプトとしてフックするには、setup.pyでconsole_scriptだと明示しておけばいい。
これどうやたらできるのか知らんかったから、またひとつ新しいことを覚えれた。
entry_points=""" # -*- Entry points: -*- [console_scripts] atomisator = atomisator.main:atomisator """,
今日はこんなところで。
*1:こういうのをどのドキュメント見て探せばいいのかがよくわからん