エキPy読書会08 (2011/2/1)

日時:

2011/2/1 19:30 - 22:00

範囲:

6章(p181) アプリケーションを作る

エキスパートPythonプログラミングの読書会8回目。 今回はつぶやきが少なかったです。内容が突っ込みにくいからね・・

質疑応答(覚えてる範囲)

  • Q: entry_points で定義できるセクションは何があるの?またどうやって調べるの?
    • A: ライブラリの egg-info/entry_points.txt を見れば分かる

      Python ドキュメントのどこかにも書いてあるはず http://www.freia.jp/taka/blog/721

  • Q: virtualenv をダウンロードして仮想環境を構築していましたが、システムにインストールするのは?
    • A: OS の root 権限があれば、システムの site-packages にインストールすれば良いよ

  • Q: virtualenv が対応している Python バージョンは?
    • A: PyPI に書いてないけど 2.4 以上で使える

  • Q: virtualenv の python.exe はどこから持ってきているの?
    • A: システムにインストールされているバイナリをコピーしている

  • Q: 古い Python バージョンを virtualenv にインストールしたいときは -p で良いの?
    • A: -p はバージョンではなくコマンド名を指定する

      古いバイナリコマンドをインストールする必要があります 歴史的に古いバイナリコマンドをビルドするのは大変???

  • Q: ソースを分割して兄弟ディレクトリ同士のパスはどうやって検出されるの?
    • A: 例えば foo の下に f1 と f2 のディレクトリがあると仮定する

      sys.path のパスを起点に import することができる 相対パス指定はセキュリティホールになるので python ではできません

  • Q: doctest がらみで疑問. きちんとした単体テストを書くと, すごく長くなってしまうけど,

    そうするとそれ以外 (.py ファイルのスクリプトや README の本文) が目立たなくなってしまう. なにかいい方法は無いのかな?

    • A: doctest は説明用の文章なのでドキュメントに向かないなら test_xxx.py を作ると良いです

      docstring は人間が読むためのドキュメントだよ、ちゃんとしたテストに使うのとはちょっと違うよ、 実行可能なドキュメントという認識が良いよ

  • Q: 日本語環境は?デフォルトエンコーディングは?
    • A: .set_encoding を sitecustomize.py に書くかどうかのお話、どうしようもない場合はそうかな

  • Q: テスターと話していると、doctest でテストを網羅すべきだという意見も聞くけどどうなの?
    • A: TDD(doctest) と単体テストは違うものという認識を持った方が良いです

      単体テストはコードカバレッジを考えて境界値テスト、ルートパターンを網羅するけれど、 doctest で全てのテストを記述して保証する必要はない、 doctest はドキュメントとして利用者へ発信するためのメッセージと捉えた方が良いです

  • Q: Nose のようなテストフレームワークを使ってどうテストを書けば良いかの方法論を知りたい
    • A: Python は枠組みを用意しているけどやり方を教えてくれない

      その辺りは Rails の方が参考になるよ

  • Q: Python なら Nose を使ったら良いの?
    • A: 回答を聞き逃しました(> <)

  • Q: setuptools ではなく distribute を使う理由は何ですか?
    • A: setuptools は 2008 年ぐらいでメンテが止まってる

      distribute は setuptools 互換ツールで、 インストールするとオリジナルの setuptools を削除して distribute の setuptools が乗っ取るようになってる

  • Q: setup.py --distribute を付ける意味は何ですか?
    • A: distribute をインストールするだけ、lib の下を見ると分かるよ

      distribute の中身を見たら setuptools と同じだと分かります Python3 系は標準の distutils に distribute の機能を取り込もうとしています

  • Q: doctest って ">>>" を検出してテストを実行するのかな?
    • A: doctest.py の中で正規表現で検出しています

      sys.ps1 を変更することで ">>>" を変えることもできるよ

参考