私は次のようなディレクトリ構造を持っています:
project/
__init__.py
foo/
__init.py__
first.py
second.py
third.py
plum.py
で、project/foo/__init__.pyからクラスをインポートしfirst.py、second.pyにthird.py入れます__all__。
で使用したいfirst.pynamedのクラスがあり、からインポートしてインポートしたいと思います。(私がそうしたい理由はこの質問の範囲外です、私には正当な理由があると仮定してください。)WonderfulThingsecond.py*foo
second.py私が試したところfrom .foo import *、これらのケースのいずれもインポートさfrom foo import *れていません。また、「トップレベルパッケージを超えて相対インポートを試行しました」というエラーが発生するを試しました。from . import *WonderfulThingfrom ..foo import *
ドキュメントとPEPを読みましたが、これを機能させる方法がわかりません。どんな援助もいただければ幸いです。
明確化/編集:__all__パッケージでの動作を誤解していたようです。モジュールと同じように使っていましたが、
from .first import WonderfulThing
__all__ = [ "WonderfulThing" ]
__all__しかし、ドキュメントをもう一度見ると、デフォルトでインポートされるモジュールの名前を指定するためにパッケージでのみ使用できることが示唆されているようです。モジュール以外のものを含める方法はないようです。
これは正しいです?
ワイルドカード以外のインポートに失敗しました(cannot import name WonderfulThing)。試行from . import fooは失敗しましたが、import foo機能します。残念ながら、dir(foo)何も表示されません。