1

を使用して、トップレベルのパッケージを超えた相対インポートをしようとしましたコードをインポートする。参考までに、私はPython 3.6を使用しています。は、私はせいぜい相対的な輸入品、特にトップレベル・パッケージに関しては、それらに関するすべてのリンクを見てきましたが、私はまだ私の相対的を得て、トラブルのトンを抱えているのpython -m

私は自分のディレクトリでテストを実行したいディレクトリを持っています。私はすべてのモジュールパッケージをInputTests.pyという1つのファイルにインポートしたいと思います。ここに私のプロジェクトディレクトリのフォーマットです。 file directory

InputTests.pyの中で、私はモジュールをこのようにインポートしよう:

from .. import modules

私はエラーを取得する:

File "/Users/wfehrnstrom/Desktop/meeting_minutes/tests/InputTests.py", 
line 2, in <module> 
from .. import modules 
ValueError: attempted relative import beyond top-level package<code> 

しかし、私はコマンドを使用しています:python -m tests.InputTests、これはおそらく通訳者に私のトップレベルのディレクトリからすべてを実行するように指示します。だから私は私の質問は、なぜ私の相対的なインポートステートメントは、私が上記のパッケージからこれを実行しているという事実を与えられて動作しないと思います。このスタックオーバーフローのポストは私が必要なものを細部に見えたが、そのソリューションは、-mを実行すると、私のために動作しません:How to do relative imports in Python?

また、このスタックオーバーフローの投稿でこれに矛盾があるように思われる:Relative importing modules from parent folder subfolder

後者のポストは、..と。 Pythonコマンドを実行する場所に基づいて変更しないでください。しかし、前者はそれがそうであると言います。これは非常に混乱しています。誰も相対輸入を明らかにし、この不一致を解決することはできますか?ありがとうございました。

答えて

0

私はPython 2.7に関するあなたの質問に答えることしかできませんが、これはとにかく役に立つと思います。

への答えに引用されているPEP 328「Pythonで相対的な輸入を行う方法?」あなたはリンクされ、それがメインスクリプトの__main__なり、したがって、-mを用いた場合であっても、まったくそのモジュールに相対インポートを使用して妨げるモジュールの__name__に基づいて輸入示唆しているため、古くなっpartwiseです。

PEP 366__package__属性を導入することで、これを解決しました。

python -m tests.InputTestsを使用する場合、InputTests.py__package__の値はtestsになります。これは、testsが現在のトップレベルパッケージであるため、親パッケージからのインポートを許可しません。ディレクトリ「meeting_minutes」でpython -m modules.tests.InputTestsを実行

それを解決する必要があります。

関連する問題