2

次のようにプロジェクトを設定するとします。

myproject/
  setup.py
  myproject/
    __init__.py
    module1/
      __init__.py
      a.py
      b.py
      test/
        __init__.py
        test.py

a.pyが持っている:

from b import Something

test.pyが持っている:

from myproject.module1 import a

test.pyが別のディレクトリにあるため、実行すると、が見つからないためtest.pyに取得します。ImportErrorb

a.py書くことでこれを修正できることは知っていますfrom myproject.module1.b import Somethingが、これはプロジェクト全体で行うには冗長すぎるようです。

もっと良い方法はありますか?

4

3 に答える 3

2

使えると思います

from .b import Something

それは相対的なものなので、常に機能するはずです。

http://docs.python.org/3/tutorial/modules.html#intra-package-referencesを参照してください

于 2013-01-11T15:23:01.483 に答える
1

たとえば、で相対インポートを試すことができますa.py

from .b import Something

しかし、これはあなたの問題に対する完全な解決策ではないかもしれません。ディレクトリ構造の上位レベルでモジュール化/パッケージ化する他のモジュールと同様に、import実行方法に注意する必要があります。具体的には、モジュールをとして実行すると、モジュールの変数がpython submodule.py暗黙的にに設定されます。インポート(相対的および絶対的)はそれに依存するため、サブモジュールを直接実行すると、インポートの動作が異なる(または、場合のように中断する)可能性があります。__name__"__main__"__name__PYTHONPATH

tests.pyあなたのように実行してみてください

python myproject/module1/test/test.py

パッケージを直接実行するのではなく、パッケージのトップレベルから。

于 2013-01-11T15:30:37.777 に答える
1

from myproject.module1.b import Somethingそれを行うための最良の方法です。少し冗長かもしれませんが、Pythonicコードで一般的に望ましい品質であることが明示されています。

于 2013-01-11T15:29:34.097 に答える