web-dev-qa-db-ja.com

1つのディレクトリに__init__.pyが含まれるパッケージでも「非パッケージでの相対インポートを試行しました」

次の行を含むextended.pyというモジュールがあります。

from .basic import BasicModule

ファイルbasic.pyは、__init__.pyと同じディレクトリにあります。ただし、次のように実行しようとすると:

python extended.py

エラーが表示されます:

ValueError: Attempted relative import in non-package

次の行も追加します。

from __future__ import absolute_import

問題を解決しません。たぶん私はあまりにも疲れて明らかなものを見ることができません-しかし、私はここで問題を見ません。

29
Alex

相対インポートはパッケージに対してのみ機能しますが、extended.py代わりにトップレベルモジュールを実行しています。

現在のディレクトリには、__init__.pyファイルですが、それではexended.pyまだパッケージの一部。

何かをパッケージと見なすには、代わりにディレクトリ名をインポートする必要があります。以下が機能します:

main.py

packagename\
    __init__.py
    basic.py
    extended.py

その後、main.py put:

import packagename.extended

thenのみがパッケージのextended部分であり、相対的なインポート作業を行います。

相対的なインポートには、相対的なものがありますtopackagename親。

51
Martijn Pieters