36

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

問題を解決しません。多分私は疲れすぎて明白なものを見ることができません-しかし私はここで問題を見ません。

4

1 に答える 1

56

相対インポートはパッケージに対してのみ機能しますが、インポートすると、代わりに最上位モジュールextended.pyが実行されます。

現在のディレクトリには__init__.pyファイルが含まれている可能性がありますが、それはexended.pyまだパッケージの一部ではありません。

何かをパッケージと見なすには、代わりにディレクトリ名をインポートする必要があります。次のように動作します。

main.py

packagename\
    __init__.py
    basic.py
    extended.py

次にmain.py入れます:

import packagename.extended

そうして初めてパッケージのextended一部になり、相対インポートが機能します。

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

于 2013-02-02T17:14:14.727 に答える