1

私のディレクトリ構造は次のとおりです

microblog/__init__.py
         urls.py
         views.py
         wsgi.py
         settings/__init__.py
                 testing.py
                 base.py
                 local.py

testing.py には相対インポートがあります

from .base import *
...
...more code

python testing.py を使用してディレクトリ microblog/settings のコマンドラインから testing.py を実行しようとすると

from .base import *
ValueError: Attempted relative import in non-package

なぜこれが機能しないのですか。設定ディレクトリは、init .py を含む有効なパッケージです。コマンドラインからのみ ValueError を取得しません

from .base import *

from base import *

コマンドラインから相対インポートを含む「testing.py」パッケージを実行すると、相対ローカルインポートが失敗してValueErrorが発生する理由を理解しようとしています。

4

1 に答える 1

2

この投稿のicyrockからの回答は、Pythonの「repl」について私が理解できなかったことを正確に明確にしています。

実行時のディレクトリ microblog/settings で

python testing.py

実際にはパッケージ「メイン」にテストを配置し、テストがパッケージ「設定」の一部であることを知りません。代わりに、これを使用して通常のパッケージ階層の一部としてモジュールとして「testing.py」を実行します

python -m microblog.settings.testing 

Python は、"testing" が "from .base import *" という相対ローカル インポートが完全に意味を持つパッケージ "settings" の一部であることを認識しているため、ValueError なしで実行します。

于 2013-04-19T22:17:25.410 に答える