7

(前の質問で説明したように)実行可能としてマークされたテストをnoseが実行しないという動作にぶつかっただけです。私はこれが驚くべきことに気づき、ここで鼻の振る舞いについて学ぶ前に、なぜ鼻がテストを実行しなかったのかを調べようとして時間を無駄にしました。

nosetestsのマンページでは、デフォルトの動作をオーバーライドするオプションについて説明しています。

--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]

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

4

3 に答える 3

5

「インポートセーフ」には、特定の定義された意味はありません。この場合、重要なのは、Pythonモジュールがインポートされたときに何かを実行できるということです(モジュールをインポートするということは、モジュールを実行し、その名前空間にすべてのものを保存することを意味することを忘れないでください)。

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

于 2012-04-26T09:29:10.547 に答える
5

私はnoseに精通していませんが、「インポートセーフ」とは、モジュールをインポートするだけで物事を定義するだけで、実行することはできないということを意味していると確信しています。

.pyファイルがスクリプトとして実行されるように設計されている場合、その機能はモジュールスコープコードの実行中に開始されるという考え方です。これは、トリックでインポートすることから保護することができます__name__ == '__main__'が、そうではない可能性があります。そうでない場合は、インポートすると、引数なしで呼び出されたときのスクリプトと同じように動作する可能性がありますが、場合によっては問題が発生する可能性があります。

したがって、フラグを渡すことでインポートするのに危険な実行可能スクリプトがないことを明示的に伝えることができ--exeます。または、スクリプトから実行可能ファイルのアクセス許可をクリアすることもできます。

于 2012-04-26T09:35:16.700 に答える
4

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

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

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

于 2012-04-26T09:27:38.187 に答える