1. ホーム
  2. python

[解決済み] pythonの相対的なインポートを説明できる人はいますか?[重複している]。

2022-04-21 18:25:43

質問

Pythonの相対インポートがどうしてもうまくいきません。それが機能しない簡単な例を作りました。

ディレクトリ構成は

__init__.py
start.py
parent.py
sub/
    __init__.py
    relative.py

/start.py だけが含まれています。 import sub.relative

/sub/relative.py には、ただ from .. import parent

他のファイルはすべて空白です。

コマンドラインで以下を実行した場合。

$ cd /
$ python start.py

得ることができる。

Traceback (most recent call last):
  File "start.py", line 1, in <module>
    import sub.relative
  File "/home/cvondrick/sandbox/sub/relative.py", line 1, in <module>
    from .. import parent
ValueError: Attempted relative import beyond toplevel package

Python 2.6を使用しています。なぜこのようなことになるのでしょうか?このサンドボックスの例を動作させるにはどうしたらいいですか?

どのように解決するのですか?

パッケージ "sub"からインポートしています。 start.py があったとしても、それ自体がパッケージに含まれるわけではありません。 __init__.py が存在する。

の1つ上のディレクトリからプログラムを起動する必要があります。 parent.py :

./start.py

./pkg/__init__.py
./pkg/parent.py
./pkg/sub/__init__.py
./pkg/sub/relative.py

start.py :

import pkg.sub.relative

これで pkg がトップレベルのパッケージとなり、相対インポートがうまくいくはずです。


現在のレイアウトを維持したいのであれば、単に import parent . なぜなら start.py でインタープリタを起動すると、そのディレクトリに start.py は、pythonのパスにあります。 parent.py は別のモジュールとしてそこに住んでいます。

また、トップレベルの __init__.py ディレクトリツリーのさらに上のスクリプトに何もインポートしないのであれば。