私は現在、Pythonのインポートに少し不満を抱いています。私は正直なところ、何か間違ったことを覚えていて、間違ってインポートを実行していると思います。 Python Import Submodule Prefix
私は自分のアプリケーションのための次のようなディレクトリ構造をしている:私は、次のいるopen_app.pyでimport open_app.Open_App as Open_App
if __name__ == "__main__":
main = Open_App()
input("Press a key to continue")
:私は、次の
open_app
|- __init__.py
|- open_app.py
|- core/
| |- __init__.py
| |- data/
| | |- __init__.py
| | |- data.py
| |- settings/
| |- interface/
|- extensions/
のinitInを持っているの.py
from core import data as Data
class Open_App():
pass
コア/ init .py、私は何も持っていません。コア/データ/ data.pyで
from data import Data as Data
Iは、以下た:
class Data():
pass
問題は、私は、次の.py有するコア/データにおける
/INIT IDLEを使用してモジュールを実行すると、次のエラーメッセージが表示されます。
Traceback (most recent call last):
File "F:\Personal\Code\Python\open_app\__init__.py", line 1, in <module>
import open_app.Open_App as Open_App
File "F:\Personal\Code\Python\open_app\open_app.py", line 1, in <module>
from core import data as Data
File "F:\Personal\Code\Python\open_app\core\data\__init__.py", line 1, in <module>
from data import Data as Data
ImportError: No module named 'data'
私はちょうどインポートを動作させようとしています。作品
from core.data.data import Data as Data
:だから私はに
コア/データ/ のinitの.pyファイルを変更することを決めました。しかし、私にとってこれは非常に良い解決策のようには見えません。すべてのサブモジュールにその上にあるすべてのモジュールディレクトリを接頭辞として付ける必要はありません。プロジェクトが単体テストを行うために大きくなるにつれて、それは非常に困難になります。
なぜ私はそのような名前に接頭語を付ける必要がありますか? のinitの.pyが
コア/データ
ディレクトリに存在するので、私がいることを考える必要があります。
はコア/データ/ data.py
は、可視およびインポート可能だろう。実際にはそうではありません。
私は間違っていますか?私は非常に謙虚に尋ねなければならないと感じており、これは基本的なことを申し訳なく思っていますが、事前に助けていただければ幸いです。私は、PEPのドキュメントを読み込んでいて、何かをクリックしていないだけです。
ありがとうございます!
これは不要かもしれませんが、おそらくコードのスタイルが一貫しているか、またはインポートされたクラスの将来の変更がそれを使用しているコードを壊さないようにしていますか? – will
これは主に明示的なものです。相対輸入に関して、私はそれらに対する議論を聞いた。これを避けるためにコードを構造化する別の方法がありますか? –