============================ エキPy読書会09 (2011/2/15) ============================ :日時: 2011/2/15 19:30 - 22:00 :範囲: 7章(p205) zc.buildoutを使う エキスパートPythonプログラミングの読書会9回目。 今回はbuildoutのお話でした。相変わらず本を読まない読書会でした。 質疑応答(覚えてる範囲) ======================== * Q: Python のバージョンの違いはどうやって管理するの? * A: virtualenv の場合はインストールしている Python へのパスを渡すとそれをコピーして環境を作る buildout の場合は bootstrap.py を実行した Python を使う * Q: 環境によって Python のバージョンが違う場合、egg-cache で共有されている egg はどうやって管理されるの? * A: egg にはソースとバイナリの2種類があり、ソースで配布されている場合は egg が実行時に作られる egg は Python のバージョン付き作られるので問題ない * Q: import するときに Python のバージョン違いのモジュールが読み込まれることはないの? * A: import の仕組みは Python パスの優先度で読み込まれるのでバージョン違いのモジュールが読み込まれることはない * Q: レシピの後ろの :(コロン) は何なの? * A: そういう仕組みだと覚えてください、実装がどうなっているかだけのお話、、、だったような、、、 * Q: buildout.cfg を設定して bin 配下にインストールされるものはどういうものですか? * A: py.exe と py-script.py は同じもので、py-script.ext は buildout が提供する exe のラッパです bin 配下にあるスクリプトでパスを解決しているのでコンソールスクリプトを作るのはよくあるパターンです * Q: 2人のプロジェクトで buildout で管理したいときは何を共有したら良いの? * A: 基本的には buildout.cfg のみ、最初の環境構築や実行のみならそれで大丈夫 バージョン指定しなかったら常に最新バージョンを探しにいく * Q: bin/py をセクション毎に作るのではなく全てで使いたいときはどうするの? * A: 例えば all というセクションを作って全てのセクションの設定すれば良いです セクションを分割するのは virtualenv を複数作るような感覚と似ている * Q: virtualenv --no-site-packages のようなオプションが buildout にもあるの? * A: zc.recipe.scripts を見ると良いよ * Q: buildout で環境作るには buildout.cfg を作って egg をインストールすれば良いの? * A: そうです、何らかのパッケージが依存しない環境で開発して別環境でも新規インストールし易いようにしておくと良い 開発後に環境構築のまとめとして buildout 設定を行ったりもしている、既存の recipe を参考にするのも良い * Q: bootstrap.py をリポジトリから取ってくるのは正しいの? * A: 正しいですし、zc.buildout をシステム領域にインストールしても良い bootstrap.py を実行したときに zc.buildout パッケージは eggs の配下にインストールされます * Q: buildout を使うには必ず recipe が必要なの? * A: そうです、recipe がないと何もできません * Q: buildout を使っている理由は何なの? * A: OS の環境を汚したくない、virtualenv で環境を複数作ると管理できなくなる、環境構築のまとめとして残す プロジェクトメンバーと buildout.cfg を共有すると、環境構築の説明が不要だし、もらった人も実行するだけで良いので楽 * Q: buildout で Python のソースだけでなく、例えば C 言語のコンパイルが必要になったらどうするの? * A: egg でバイナリ egg を配布することができます、Windows 向けはバイナリ egg を配布することが多い ソースのみの場合はコンパイラがないとインストールできません * Q: GAE の dev_appserver が何とかでかんとかの質問? * A: entry_points を定義してエイリアスのスクリプトを定義する setuptools の仕組みをそのまま真似てやると良いよ 例えば django だったら python manage.py でやるところを ./bin/manage で実行できる 参考 ====== * ATND: http://atnd.org/events/12599 * Togetter: http://togetter.com/li/101499