1

ホストの Python パスにディレクトリを追加せずに最上位ディレクトリからコードが実行されるように、Python パッケージを整理するにはどうすればよいですか?

また、パッケージの最上位ディレクトリを Python パスに追加しなくても、さまざまなテスト サブディレクトリからテストを実行できるように、コードを整理したいと考えています。

次のコード レイアウトを検討してください。

foobar/
  __init__.py
  README.txt
  its_a_module.py
  one_package/
    __init__.py
    foo.py
    bar.py
    tests/
      __init__.py
       testing_one_package.py
  tests/
    __init__.py
    test_foobar.py
  • foob​​ar/ にあるとき、python インタープリターで foobar とそのすべてのサブモジュールをインポートできるはずです
  • foob​​ar/ から、tests/test_foobar.py を実行できるはずです。
  • foob​​ar/tests から、test_foobar.py を実行できるはずです
  • one_package/tests から、testing_one_package.py を実行できるはずです。

これらの目的を達成するために、さまざまなモジュールのインポート ステートメントとinit .py ファイルの内容を整理するにはどうすればよいですか?

(私は distutils を使用してコードを管理したいと考えており、最上位ディレクトリからコードを実行することは有用な前兆であると読みました。)

4

1 に答える 1

0

に追加でき..ますPYTHONPATH。これにより、最初の 2 つの条件が満たされます。

  • foob​​ar/ にあるとき、python インタープリターで foobar とそのすべてのサブモジュールをインポートできるはずです
  • foob​​ar/ から、tests/test_foobar.py を実行できるはずです。

絶対インポートはいつでもできますが、import foobarその他の相対インポートはできfrom foobar.one_package import ...ません。import one_packageこのようにして、foobar ディレクトリから任意のサブモジュールを実行できます。

他の2つの規定については、

  • foob​​ar/tests から、test_foobar.py を実行できるはずです
  • one_package/tests から、testing_one_package.py を実行できるはずです。

の祖父母と曽祖父母を に追加することもできますがPWDPYTHONPATHこれは聞いたことがありません。foobarfoob​​ar パッケージを利用できるようにしたい場合は、 をインストールする、つまり、パスに配置することを実際に回避することはできません。

于 2012-05-29T21:38:23.657 に答える