Hatena::ブログ(Diary)

そこはかとなく書くよ。

2010-06-18

エキスパート Python プログラミング読了

エキスパート Python プログラミング読み終わりました。これは良本!

pythonは趣味のプログラミングで使っているだけで、業務で本格的に使ったことはありません。なので、ずっと適当に書いてました。それでも問題ないのがPythonの良いところなのですが、この本を読んでいろいろ勉強させてもらいました。

第二章 構文ベストプラクティス

実はリスト内包表記は使ったことがないんです。簡潔過ぎてわけが分からなくなるんです。でも、実行効率が上がると分かったのでこれからは積極的に使っていこうと思います。

デコレータは知っているけど自分で使ったことはありませんでした。こんなことができるのかー、とびっくり。

第四章 良い名前を選ぶ

名前付けは言語によって流儀が違うのが悩ましいですよね。最近はJavaC#を書いてるので、さらに混乱です。

PEP 8(http://oldriver.org/python/pep-0008j.html)に書いてあります。

定数
UPPER_CASE_WITH_UNDERSCORES
変数
lower_case_with_underscores
プライベート変数
最初に_をつけて、lower_case_with_underscores
関数
lower_case_with_underscores
引数
lowercaseか、lower_case_with_underscores
プロパティ
lower_case_with_underscores
クラス
CamelCase
モジュールとパッケージ
lowercase

第5章 パッケージを作る

自分だけで使うならば実行できればいいので、パッケージとか気にする必要はありませんでした。でも、やっぱり共通パターンに則っておいた方がいいのでしょうね。

基本的には

  • setup.py
  • MANIFEST.in

の二つを書けば標準に則った形になるようです。

実際には paster create basic_package で雛形を作るのが楽とのことです。

(pasterについてあんまり分かってない)

setup.pyにあるカテゴリは

http://pypi.python.org/pypi?:action=list_classifiers から探します。

第6章 アプリケーションを作る

ちょうどRSSを読み込んだりDBを扱ったりする小さなアプリケーションを作ってたところだったのでこの章を読んで、勉強になりました。というか、そうだったのか!と思うことが多々ありました…

第7章 zc.buildoutを使う

いまいちbuildoutとvirtualenvsetuptools(setup.py)とをどういう使い分けをすればいいのかが分かりませんでした。たぶん大規模になってくると必要になるんだと思いますが、ちょこちょこっと書いてるだけでは必要ないんじゃないかと思いました。

あとは

コード管理とかsphinxとかテストとかはだいたい知ってたので、自分の知識の確認ができてよかったです。

とかく

pythonは(英語の)ドキュメントが充実しているのがいいですよね。一方、日本語の資料はまとまったものや最新のものはほとんどないのが悲しいです。適当にぐぐって出てきた情報は、古い情報だったりしますしね。

というわけで、こういう本で最新情報がまとまった形で得られたというのはありがたいことです。感謝!

しみずかわしみずかわ 2010/06/19 09:14 virtualenvはeasy_installとかしても大元のPython環境を汚さずに済むようになります。buildoutはさらに構成管理もしてくれるのでディレクトリ作ったり設定ファイル生成したりもやってくれます。ちょっとしたプログラム作成の場合でもbuildoutが使えると何かと楽ですよ!このへんも参考にどうぞ〜 http://www.freia.jp/taka/blog/691

rudirudi 2010/06/19 22:04 コメントありがとうございます!
で、すいません、virtualenvはまったく違うものなので、これはぼくの書き間違いです。分からなかったのはsetuptools,buildoutの使い分けですね。ただ、もう一度読み直してみるとbuildoutは中でsetuptoolsを使ってるようなので、buildoutが使えればおーけー、ということになるのでしょうか。

しみずかわしみずかわ 2010/06/20 11:59 setuptoolsはパッケージングとインストールのためのツールで、パッケージ(.eggとか)を作成したりeasy_installコマンドを提供します。easy_installはパッケージを提供する開発者が必要だと考えている依存パッケージも自動的にインストールしてくれます。しかし使う側はたいていの場合複数のパッケージをインストールするので(WebとMailとDB操作と..等)、そういった環境構築手順をまとめて記述しておけるのがbuildoutです。高機能なMakefile...みたいな感じです。

rudirudi 2010/06/20 22:21 はい。buildoutの様々なレシピを組み合わせることで、複雑なことやuninstallなどのsetup.pyではできないことができるようになるのは分かります。
しかし、依存パッケージをインストールするだけであれば、setup.pyにinstall_requiresを書くだけで十分だったりするのではないかな、と思ったわけです。
あと、buildoutに対して「?」と思ったのは、P.205に"zc.buildoutに代わるツールとしては、PaverとAutomateItがあります"と書かれていたので「え、じゃあ、そっちを勉強した方がいいんじゃ?」と思ってしまった、という点もあります。(実際にはどうやらbuildoutが一番活発そうですが)

しみずかわしみずかわ 2010/06/20 22:51 setup.pyにinstall_requiresを書くだけでは出来ない事がbuildoutでは出来ます。その例がP255のTracのインストール用に定義したbuildout.cfgです。詳細は読んでもらうとして、ここで行っている「Tracインスタンスの作成と各種設定」はsetup.pyでは出来ない事です。他にもpbp.recipe.tracの設定次第ではTracプラグインのダウンロードとインストールも同時に行うことが出来ます。つまり、buildoutはパッケージのインストール、インスタンス作成、設定、プラグイン追加、等々の環境構築手順を自動化するためのものという事になります。

PaverとAutomateItの一文については「Pythonに代わるスクリプト言語としてRubyがあります」というような意味合いです。同様なことが出来るツールとして紹介しており、優劣や向き不向きについては言及していません。「...と同じようなことができるツールとして...」と書けば良かったですね。分かりにくかったようですみません。

rudirudi 2010/06/20 23:38 ありがとうございます!
はい。buildoutの方が強力だ、ということは分かりましたので、これからもう少しちゃんと勉強したいと思っています。

PaverとAutomateItについては、ここまでに「setuptoolsは古い、今はdistributeだ」という話が何度か出てきてたので、それと同じなのかと思ってしまっただけです。ちょっと調べればすぐ分かりました。すいません…

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/rudi/20100618/1276870804