21

私は次のものを持っています:

         ModuleFolder
              |
              |-->. ModuleFile.py .
              |
              '-->. TestsFolder .
                         |
                         '---> UnitTest1.py

親ディレクトリからインポートしようとしています。この場合、テスト フォルダーから「UnitTest1.py」を実行し、そのすぐ上のディレクトリ (ファイル「ModuleFile.py」) からインポートしようとしています。

  • これにはすでにたくさんの答えがあることを私は知っています。 SO Question1SO Question2その他すべての SO Question。明示的なパスではなく、相対インポートとして「using ../」を見つけることができませんでした。
  • Python 2.5の時点で、の使用について言及しているドキュメントに従って「相対インポート」がサポートされていることは知っていますが、ユニットテストでより明確になり、名前のマングリング/衝突を回避できるようにfrom .. import *、具体的に実行しようとしています。import MyModuleName

私がやっていること(そしてそれは私のために働いています)は次のとおりです:

sys.path.append("../")

そして、親ディレクトリから必要なものをインポートします。

  • はい、親ディレクトリに __init__.py があり、
  • いいえ、私の親パスは Python パスまたは環境変数の一部ではありません
  • 親パスを に追加しないのはなぜsys.pathですか? 相対的だから。/home/workspace/MyModule/unittests/ から実行していて、モジュールが /home/workspace/MyModule/ の下にある場合、/home/workspace/MyModule/ をパスに追加しても、同僚がこれを実行した場合、必ずしも true になるとは限りません。彼のマシンの /home/documents/MyModule という自分のディレクトリの下にあります。

私の質問:

これはPythonに適していますか?そうでない場合、これの何が問題なのですか。より良い方法はありますか?それとも、これは本当に、私がすでに見た 7 つ以上の SO の質問の 1 つに答えがある RTFM の瞬間ですか? (私が取った相対パスアプローチではなく、明示的なパスを推奨しているすべての人を見ました)。

その他の有用な情報:

  • パイソン 2.6
  • Linux で作業していますが、Win にも簡単に移行できます。
4

6 に答える 6