Pythonのバグサイト(bugs.python.org)にバグをレポートしてみる
Python 2.7.2のインストールでエラー(*)が出て、一部公式パッチが見当たらなかったので、PythonのIssue Trackerにバグを投稿してみました。
またお世話になりそうなので、メモしておきます。
(*)エラーの詳細→http://toggtc.hatenablog.com/entry/2012/01/29/014540
アカウントの作成
ここでアカウントを登録します。
http://bugs.python.org/
OpenIDを使ってログインするか、ページ左側の「Register」というリンクから辿ってアカウントの登録を行います。
アカウントの登録を行う場合、以下の項目を入力します。
項目 | 内容 |
---|---|
Name | 名前 |
Login Name* | ログイン名(アカウントID) |
Login Password* | ログインパスワード |
Confirm Password* | パスワードの確認 |
Phone | 電話番号 |
Organisation | 所属組織 |
E-mail address* | Eメールアドレス |
Alternate E-mail address, One address per line | その他のEメールアドレス |
(*は必須)
投稿する、その前に
「Search」のリンクから、既に同じ内容のIssueが投稿されていないか検索しましょう。
Issueが重複すると、中の人にとっては負担になってしまいます。最新版リリース後にパッチが作られているかもしれないので、対象バージョンのリリースより前まで遡って調べたほうがいいでしょう。
またバグかどうかよく分からないものは、メーリングリストに投稿するという手もあります。
http://mail.python.org/mailman/listinfo
投稿する
ログインしたら、http://bugs.python.org/の左側に、「Create New」という項目が表示されます。
「Create New」のリンク先を開くと、Issueの編集画面が表示されます。
各入力項目をみていきます。
classification: 分類
設定した分類が間違っていたら、親切な中の人が修正してくれます。
- Title:件名
- Type:種別
- no selection: 未選択
- behavior: 挙動、調子
- crash: クラッシュ
- compile error: コンパイルエラー
- resource usage: リソースの取り扱い =>リソース枯渇しやすいコードだとか、メモリ解放してないとか
- security: セキュリティ
- performance: パフォーマンス
- enhancement: 強化 => 機能強化とか品質強化、ですかね
- State:状態 =>初期は設定不可
- Components:コンポーネント =>問題の対象となっているPythonのコンポーネントを選択します(複数選択可)
- Versions:バージョン =>なるべく、他のバージョンでも再現するかチェックしておくといいですね
process: 進行状態
processの欄には、主にバグ等Issueの内容を記入します。
- Assinged To: Issueの割当先。権限のあるメンバでないと変更できない、っぽい
- Nosy List: このIssueの更新が通知される人のリスト、のようです
- 投稿者と選択したコンポーネントの関係者が自動で追加されるので、未設定でOKです。この人に見て欲しい、というのがあれば、対象者のpythonユーザIDを入力します。ちなみに各コンポーネントのエキスパートは以下のページに記載されています。
- http://docs.python.org/devguide/experts.html#experts
- Priority: 優先度。権限のあるメンバでないと変更できない、っぽい
- keywords: キーワード。権限の(ry
- Comment: コメント
- バグ報告の場合、英語が苦手ならログを送るだけでいいと思いますが、前提となる環境や条件は明記しておきましょう
- File: 添付ファイル
- 添付ファイルは1つしか付けられないようです。なるべくpythonの外にあるサイトのURLは貼らないほうがよさそうです。リンク切れするといけないので。(私はついやってしまいましたが、、)
- File Description: 添付したファイルの内容
- Remote hg repo: Pythonのリポジトリにあるパッチ等のパスを入れるみたいです
バグレポートを書くときの注意点
以下のページが参考になります。
ウノウラボ
良いバグレポートの書き方
http://labs.unoh.net/2006/05/post_13.html
MOZILLA DEVELOPER NETWORK
Bug writing guidelines
https://developer.mozilla.org/ja/Bug_writing_guidelines
特に障害解析をする側の立場から見ると、事象が発生する条件は大事ですよね。
投稿したもの
パッチが見当たらなかったのでドキドキしながら無邪気に投稿してみたもの。
http://bugs.python.org/issue13901
今回はパッチを自分なりに作って投稿してみました。
MacユーザUZEEEEってdisられるかな、と思ったのですが、ビルドエキスパートonMacなNed氏にさっそくパッチを修正していただきました。さらにMacでのバイナリ特性についても説明していただいて、感動でした。Thanks, Ned!
修正していただいた内容だとLinux環境でも同じ事象が起こるんじゃないかと思い、試してみたのですが、pure GCCは-L(空白)を許容してApple GCCは許容しませんでした。というわけで、Ned氏の修正の方が正しいですね。(ディスクの空きがなくて、Linux+GCC 4.2環境を作るのに手こずっちゃった。)
今回の修正は、Python 2.7.3, 3.2.3でリリースされるようです。楽しみですヽ(´ー`)ノ
コミュニティーに参加すると刺激があって良いですね。Pythonをいじっていたはずなのに、Macのバイナリにもっと詳しくなろうとか、英語を上達させようとか思えてきますから。
test_get_outputsで実行されるgccコマンドのGNU's GCCとApple's GCCの違いをメモ:
# # configure # # on Linux (GNU's GCC) ./configure CC=/usr/local/bin/gcc CXX=/usr/local/bin/g++ --enable-shared --enable-unicode=ucs4 # on Mac (Apple's GCC) ./configure CC=/usr/bin/gcc-4.2 CXX=/usr/bin/g++-4.2 LDFLAGS='-L/usr/local/lib -L/usr/X11R6/lib --enable-shared MACOSX_DEPLOYMENT_TARGET=10.7 # # compile # # on Linux (GNU's GCC) /usr/local/bin/gcc -pthread -fno-strict-aliasing -g -O2 -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -I/home/toggtc/.pythonbrew/pythons/Python-2.7.2/include/python2.7 -c /tmp/.../foo.c -o /tmp/.../foo.o # on Mac (Apple's GCC) /usr/bin/gcc-4.2 -fno-strict-aliasing -g -O2 -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -I/Users/toggtc/.pythonbrew/pythons/Python-2.7.2/include/python2.7 -c /var/folders/.../foo.c -o /var/folders/.../foo.o # # Link # # on Linux (GNU's GCC) /usr/local/bin/gcc -pthread -shared /tmp/.…/foo.o -L/home/toggtc/.pythonbrew/pythons/Python-2.7.2 -L -L/home/toggtc/.pythonbrew/pythons/Python-2.7.2/lib -lpython2.7 -o /tmp/.../foo.so # => foo.so created # on Mac (Apple's GCC) /usr/bin/gcc-4.2 -bundle -undefined dynamic_lookup -L/usr/local/lib -L/usr/X11R6/lib /var/folders/.…/foo.o -L`pwd` -L -o /var/folders/..../foo.so # =>ld: warning: directory not found for option '-L-o'