[python]パッケージ


参照:https://wikidocs.net/1418
✍️  小包
🔸  パッケージ:複数のモジュールの組合せ
パッケージはポイント(.)Pythonモジュールをディレクトリ構造で管理できます.
、¥4、¥ポイント(.)使用A.B:パッケージ名A:AパッケージのBモジュール
  • ルートディレクトリ:最初のディレクトリ
  • サブディレクトリ:ルートディレクトリのディレクトリ
  • ✍️  パッケージの作成
    🔷  パッケージの基本コンポーネントの準備
    ルートディレクトリとサブディレクトリを作成します.pyファイルを作成します.
    🔷  各ディレクトリでBファイルを作成します.
    🔷  .pyファイルに関数を入力
    ✍️  パッケージ内の関数の実行方法
    パッケージechoを使用します.pyファイルのecho test関数の実行方法
    パッケージ内の関数を実行するには、3つの方法があります.
    🔷  echoモジュールのインポートと実行
    import game.sound.echo  ⬅️ game 안에 sound 안에 echo
    game.sound.echo.echo_test()
    
    👉 echo
    🔷  echoモジュールが存在するディレクトリから...インポートと実行
    from game.sound import echo  ⬅️ game 안에 sound 안에 echo라는 모듈만
    echo.echo_test()
    
    👉 echo
    🔷  echoモジュールのecho test関数を直接インポートして実行
    from game.sound.echo import echo_test  ⬅️ echo_test라는 함수만
    echo_test()
    
    👉 echo
    読み込んだ関数の名前を変更して書き込むことができます
    from game.sound.echo import echo_test as e ⬅️ 이름 바꿔서 쓰겠다
    e()
    
    👉 echo
    __init__.py類似点演算子(.)インポートを使用する場合、
    最後のcはモジュールまたはパッケージでなければなりません.
    ✍️   import a.b.c .pyの用途
    パッケージに関する設定__init__ファイルは、そのディレクトリがパッケージの一部であることを知らせる役割を果たす.
    パッケージに含まれるディレクトリ__init__.pyファイルがない場合はパッケージとして認識できません.
    📕 
    python3.3 버전부터는 __init__.py 파일이 없어도 패키지도 인식하지만
    하위 버전 호환을 위해 __init__.py 파일을 생성하는 것이 안전하다.
    使用__init__.py特定ディレクトリのモジュールをインポートする場合は、以下のようにそのディレクトリの*ファイルに入力します.
    __all__ = ['echo']   👈 해당 디렉터리의 __init__.py 파일에 입력
    __all__ = ['echo', 'echo2', 'echo3']   👈 [] 안에 계속 추가 가능
    __init__.py変数を設定し、インポート可能なモジュールを定義します.
    前述したように__all__ファイルを変更して実行すると、出力に必要な結果が確認されます.
    from game.sound.echo import *
    echo_test()
    
    👉 echo
    __init__.pyfromの最後のcがモジュールである場合、from a.b.c import *無条件輸入.__all__『輸入許可証管理弁法』、『輸入許可証管理弁法』、『輸入許可証管理弁法』、『輸入許可証管理弁法』、『輸入許可証管理弁法』、『輸入許可証管理弁法』、『輸入許可証管理弁法』、『輸入許可証管理弁法』、
    ✍️  関連パッケージ
    game > graphic > render.py 
             sound > echo.py
    graphicディレクトリのrenderの場合pyモジュール音声ディレクトリのecho.pyモジュールを使用する場合は、を表示します.pyを修正すればいいです.
    # render.py
    from game.sound.echo import echo_test  ⬅️ 추가
    
    def render_test():
        print("render")
        echo_test()
    from game.graphic.render import render_test
    render_test()
    
    👉
    render
    echo
    次のように相対的にインポートすることもできます.
    # render.py
    from ..sound.echo import echo_test  ⬅️ .. : 상위 폴더로 이동
    
    def render_test():
        print("render")
        echo_test()
    graphディレクトリとsoundディレクトリは同じ深さです.
    親ディレクトリ(...)を使用して、上記のインポートを行います.
    📕  関連アクセス者from game.sound.echo import *–親ディレクトリ__all__   – 現在のディレクトリ
    関連するアクセス者は、モジュール(ファイル)内でのみ使用できます.