2012-04-26 7 views
6

私は、ノーズが実行可能とマークされたテストを実行しないような動作をしました(a previous questionで説明)。私はこれが驚くべきことであることを発見しました。ここで鼻の行動を知る前に、鼻がなぜ私のテストを実行していないのかを調べるのに時間を無駄にしました。 nosetestsのマンページでPythonで「安全にインポートする」とはどういう意味ですか?

は、それがデフォルトの動作を無効にするオプションを説明します

--exe    Look for tests in python modules that are executable. 
        Normal behavior is to exclude executable modules, 
        since they may not be import-safe [NOSE_INCLUDE_EXE] 

私の質問は:「インポート・安全」とは何を意味するのでしょうか?非インポートセーフモジュールの例は何ですか?また、インポート可能でないモジュールは、実行可能ビットを削除することによってインポートセーフにすることができますか、それ以上のことはありますか?

答えて

5

私は鼻に慣れていませんが、 "import safe"が意味することは、モジュールをインポートすることは、物事を定義するだけでなく、実行しないことです。

.pyファイルがスクリプトとして実行されるように設計されている場合、その機能はモジュールスコープコードの実行中に開始されるという考えがあります。これは、__name__ == '__main__'のトリックでインポートすることを防ぐことができますが、そうでないかもしれません。そうでない場合は、引数を指定しないで呼び出すと、スクリプトと同じことが起こる可能性があります。

したがって、--exeフラグを渡してインポートするのが危険な実行可能なスクリプトがないことを明示的に指定するか、スクリプトから実行可能権限を削除することができます。

4

スクリプトとしてインポートまたは実行できるモジュールを指します。これは通常、次のコードによって行われます。

if __name__ == "__main__": 
    print "running as script" 

実行可能であることを意味したスクリプトは、このチェックを持っていない場合、インポートはすぐに、おそらく上げ望ましくない副作用または例外で終了しますそれを実行します。

5

"import-safe"には、定義された特定の意味がありません。この場合、ポイントは、Pythonモジュールがインポートされたときに何かできることです(モジュールをインポートすることは、モジュールを実行することとその名前空間にすべてのものを保存することを意味する)。

モジュールが実行可能ビットでマークされている場合、noseは、これが当てはまると仮定します。テストを実行するたびにそのようなことが起きないようにするため、モジュールをスキップします。

+0

@ NiklasB。申し訳ありませんが、私はあなたの質問を理解していません。それは何ですか? – katrielalex

+0

気にしないでください。私は 'nose'を参照していましたが、エラーメッセージによると、execビットをチェックするだけです。 –

関連する問題