noseのsys.path改竄を防ぐ

皆さんご愛用のテストランナーであるnose、これには便利機能があります。 以下のようなディレクトリ構造があったとします。

foo
+ src
  + foo
    + ...
+ lib

このときにnoseは デフォルトでfoo/srcとfoo/libをsys.pathに追加(insert)します。 つまりlibディレクトリのなかに同名のモジュールがあったらそちらが読み込まれます。

ひどいですね。

これを防ぐにはコマンドライン引数か環境変数で指定する必要があります。

-P, --no-path-adjustment

    Don’t make any changes to sys.path when loading tests [NOSE_NOPATH]

ちなみに対象のディレクトリはlibとsrcのみで、それらは文書に書かれていません。

ひどいですね。

Djangoのような予期しないパスの書き換えをしてほしくないときは

nosetests -P

覚えましたね?