3

私はおおよそ次のレイアウトでPythonプロジェクトに取り組んでいます

project/
    foo/
        __init__.py
        useful.py
        test/
            __init__.py
            test_useful.py

test_useful.py は project.foo.useful をインポートしてテストできるようにしようとしますが、「python project/foo/test/test_useful.py」と言うと機能しませんが、現在のにコピーすると機能しますディレクトリを開き、「python test_useful.py」を実行します。

開発中にこれらのインポートを処理する正しい方法は何ですか? PYTHONPATH にあるため、一度インストールすると問題にならないようです。distutils を使用して build/ フォルダーを作成し、それを PYTHONPATH に追加する必要がありますか?

4

2 に答える 2

0

distutils/setuptools を使用して、プロジェクトを Python 標準の方法でインストールできるようにすることを検討してください。(ヒント: setup.py ファイルを「foo」ディレクトリと並行して作成する必要があります。これはパッケージとも呼ばれます。)

そうすることで、多くの一般的な Python テスト フレームワーク (nose、py.test など) を使用して、テストを収集して実行できるようになります。このようなフレームワークのほとんどは、'foo' がインポート可能なパッケージであることを事前に自動的に確認します。テストを実行しています。あなたの test_useful.py テストは問題なく 'foo.useful' をインポートできます。

また、ディレクトリ構造の例から注目に値するのは、テストディレクトリをPythonパッケージにしないことが一般的に推奨されているように見えることです。つまり、test/ init .py ファイルを削除します。フレームワークはテストが実行可能であることを保証し、それをパッケージとして持たないことは、ソースディストリビューションでのみ配布され、バイナリディストリビューションでは配布されないことを保証するのに役立ちます (おそらく望ましくない場合)。

于 2012-04-28T23:16:53.113 に答える
0

まず、「プロジェクト」または「プロジェクト」の親を含めるように PYTHONPATH を設定する必要があります。これは、開発中も重要です:-)

次に、絶対インポートを使用できるようにする必要があります。

from project.foo import useful

次に、モジュールを実行してテストを実行する代わりに、py.test (pip install pytest) をインストールすることをお勧めします。次に、py.test の呼び出しが十分に汎用的である限り、相対インポートを使用できます (つまり、「py.test foo」は機能しますが、「py.test foo/test/test_useful.py」は機能しません)。テストでは相対インポートを使用しないことをお勧めします。

于 2012-04-28T21:19:00.413 に答える