1. ホーム
  2. Python

Pythonです。相対インポート 相対パス ValueError: パッケージ以外での相対インポートの試み

2022-02-20 17:28:29

相対パスimportを含むpythonスクリプトは直接実行することができず、モジュールとしてのみ参照することができます。理由はマニュアルにあるように、いわゆる相対パスは実際には現在のモジュールからの相対パスですが、スクリプトを直接実行すると、モジュール名が本来のモジュール名ではなく "__main__" になってしまうため、相対パスは本来の相対パスではなく、エラーで import が失敗してしまうからです "ValueError。非パッケージで相対インポートを試みました"

明示的および暗黙的な相対インポートは、現在のモジュールの名前に基づいていることに注意してください。 "__main__" Pythonアプリケーションのメインモジュールとして使用することを意図したモジュールは、常に絶対インポートを使用する必要があります。


相対パスの具体的なルールは、以下のように比較することができます。

1. ファイルの構造

sound/ Top-level package
      __init__.py Initialize the sound package
      formats/ Subpackage for file format conversions
              __init__.py
              wavread.py
              wavwrite.py
              aiffread.py
              aiffwrite.py
              auread.py
              auwrite.py
              ...
      effects/ Subpackage for sound effects
              __init__.py
              echo.py
              surround.py
              reverse.py
              ...
      filters/ Subpackage for filters
              __init__.py
              equalizer.py
              vocoder.py
              karaoke.py
              ...





2. から サラウンド モジュールを使用することができます。

from . import echo
from ... import formats
from . .filters import equalizer