この(または同様の)質問はこれまで何度も聞かれましたが、私の場合、提供されたソリューションはどれも機能しませんでした。私のプロジェクト構造は次のようなものです:
| project_2
main.py
__init__.py
systems.py
| config
__init__.py
options.py
| database
__init__.py
database.py
entity.py
| tests
__init__.py
test_systems.py
test_options.py
test_database.py
test_entity.py
明らかに、テストパッケージの下にあるテストモジュール内のすべてのモジュールをインポートする必要があります。ドット構文を使用して相対インポートを試しました。
from ..systems import System
from ..config import options
from ..database.entity import Entity
ValueErrorを返します:非パッケージで相対インポートを試みます。私は、すべて(システムを含む)が独自のパッケージに含まれるパッケージ構造でそれを試しました。同じメッセージで失敗します。
本当に気になるのは、これが機能するはずだということです:PEP 328ですが、機能しません。パッケージを$PYTHONPATHに追加したり、ファイルパスからimpを使用してモジュールをロードするなどの非常識な方法を使用したりする必要はありません。
問題の一部はsystems.pyがメインパッケージに含まれている可能性があることを読みましたが、それは残りの相対インポートも機能しない理由を説明していません。
PS私は実際にそれをテストするためにPEP328から例を再作成しましたが、それは機能しません。