Module & Package [Wecode][210809]


今回はPythonのModeule&Packageを知りたいです.
<ディレクトリ>
1.モジュールとは?
2.モジュールの作成と呼び出し方法
3.コースは何ですか.
4. sys.モジュールとシステム.pathの違い
5.Apsolutepathと相対pathの違い
6.サンプルパッケージの作成

1.モジュールとは?


Pythonでは、モジュールは変数、関数、クラスが集合したファイルです.
モジュールを個別にアーカイブする理由は、通常次のとおりです.
  • 他のファイルもモジュールに含まれる変数と関数を使用することを望んでいるため、
  • .
  • 完全なコードは1つのファイルに置くのが大きすぎて、複数の分割とクリーンアップを行うために、
  • 2.モジュールの作成と呼び出し方法


    モジュールを作成する方法は簡単です.
    フォルダにファイルを作成し、再利用したい関数やクラスを実装するだけです.
    呼び出し方法はimportキーワードを使用すればよい.
    たとえば、my moduleというモジュールのみを作成する場合は、次の操作を行います.

    import my moduleコマンドを入力して呼び出すことができます.
    モジュールを呼び出すと、モジュール内の変数、関数、クラスを使用できます.入力方法は次のとおりです.
    <モジュール名>.<モジュールで使用する変数、関数、クラス名>
    --> my_module.my_module_func()
    モジュール名を呼び出す変数、関数の前に1つ追加する必要があります.
    また、importキーワードのほかに、他のフォーマット(from...import...)もあります.のキーワードを使用してモジュールを読み込むことができます.
    サンプルコードを以下に示します.

    モジュールに含まれる変数、関数、クラスを上記のように呼び出すと、変数、関数などを呼び出すときにモジュールの名前を前に付ける必要はありません.
    また、複数のモジュールをインポートして使用する必要がある場合は、各モジュールに含まれる関数の名前が同じであるために競合する可能性があります.
    この場合、import asキーワードを使用して問題を解決できます.
    import asキーワードを使用すると、私が使用する変数、関数、クラスを新しい名前に割り当てることができます.
    サンプルコードを以下に示します.

    3.コースは何ですか。


    パッケージは簡単にモジュールの集合と言える.
    前述したように、モジュールは簡単なPythonファイルです.パッケージをこれらのファイルを含むフォルダと見なすと分かりやすいです.
    パッケージを使用する理由は、モジュールに含まれるコードの量が大きすぎて1つのファイルに保存しにくい場合、コードを複数のモジュールに分散して格納し、1つのパッケージで管理できるためです.
    パッケージの名前はフォルダの名前と同じで、次のように呼び出されます.


    また、パケットインポート時に初期設定を行う必要がある場合がありますが、この場合、パケットにinitを設定する必要があります.pyを作成し、このファイルで初期設定を行えばいいです.
    パッケージ内のinit.pyファイルがある場合、パッケージのインポート時に自動的にファイル内のコードが実行されます.
    init.pyファイルでできることは以下の通りです.

  • Import時のパスの全長を減らす
    通常、パッケージ&モジュールに含まれる関数を呼び出す場合は、次のコードを記述します.

    パスの長さを短くするには、次のコードを入力します.


  • パッケージからインポートできる変数、関数、クラスの制限

  • パッケージのインポート時に最初に実行するコードを実行
    インポート時に最初に実行しなければならないコードはinitです.pyに書けばいいです
  • 4. sys.モジュールとシステム。pathの違い


    まずはsysです.モジュールについてsys.モジュールは、組み込まれたパッケージ&モジュールまたはインポートされたパッケージ&モジュールの記憶です.したがって,モジュールやパケット命令を入力すると,Pythonがモジュール&パケットを最初に検索する場所でもある.すなわち,再インポートするモジュールはsysである.モジュールに見つかりません.
    加えてsys.モジュールは簡単な辞書構造です.
    sys.pathはstring要素を持つlistです.
    各stringはファイルパスを表し、そのパスは以下に示す.

    上の画像のパスで入力したパッケージ&モジュールがあるかどうかを検索します.
    Pythonでモジュール&パッケージを検索する手順は、次のとおりです.
  • sys.modules
  • built-in modules
  • sys.path
  • 5.Absolute pathと相対pathの違い


    まずAbsolute pathについて説明しますが、その名の通り絶対パスです.importのモジュール&パッケージの位置にかかわらず、パスは常に同じなので、絶対パスと呼ばれます.
    相対パスは相対パスであり、絶対パスとは異なり、定義されたパスはトップディレクトリではなくimportの位置に基づいています.
    通常、相対パスは、local packageから同じ行の他のlocal packageをインポートするために使用されます.相対パスを使用するのは、絶対パスに対してパスの長さが減少するためです.
    ただし、混同しやすく、モジュール&パッケージ内のファイルやフォルダの位置が変化した場合、パスの位置を変更する必要があるため不便です.したがって、一般的でない場合は、絶対パスを使用することが望ましい.
    次の例では、絶対パスと相対パスを使用してモジュールとパッケージをインポートする方法を示します.
    └── my_app
        ├── main.py
        ├── package1
        │   ├── module1.py
        │   └── module2.py
        └── package2
            ├── __init__.py
            ├── module3.py
            ├── module4.py
            └── subpackage1
                └── module5.py

    1. Absolute path

    from package1 import module1
    from package1.module2 import function1
    from package2 import class1
    from package2.subpackage1.module5 import function2
    my appパッケージに含まれるモジュール&関数を絶対パスでインポートする方法は以下の通りです.

    2. Relative path

    # package2/module3.py
    
    from . import class1
    from .subpackage1.module5 import function2
    絶対パスを使用してpackage 2のmodule 3からpackage 2のクラス1とpackage 2のサブパッケージsubpackage 1のmodule 5の関数2をインポートするには、上記の手順を実行します.

    6.サンプルパッケージの作成


    例として、Calculatorというパッケージを作成し、いくつかのテストを行いました.
    main.py
    
    # absoulte path
    # from calculator.add_and_multiply import add_and_multiply 
     
    # relative path
    from .calculator.add_and_multiply import add_and_multiply
     
    if __name__ == '__main__':
        print(add_and_multiply(1,2))
    add_and_multiply.py
    
    from .multiplication import multiply
    # from calculator.multiplication import multiply
     
    def add_and_multiply(a,b):
        return multiply(a,b) + (a+b)
    multiplication.py
    
    def multiply(a,b):
        return(a*b)
    ここでいくつかのテストを行いました.
    まずmainpyファイルでは、上記の例のようにadd and multiply関数を相対パスとして実行してみます.
    その結果は以下の通りである.

    上記のエラーの原因を検索すると、相対パスを呼び出すときに現在のモジュールの名前に基づいていることがわかります.したがって、importのadd and multiplyモジュールの名前はmainです.また,モジュール自体の名前もmainになっているため,2つの名前がmainに重なるとエラーが発生する可能性がある.
    だからmain.pyファイルからモジュールをインポートするには、常に絶対パスを使用する必要があります.
    最後にadd and multiply.絶対パスと相対パスとしてpyに乗算関数をそれぞれインポートします.
    まず相対パスimportを使用すると、次のようになります.
    from .multiplication import multiply
    # from calculator.multiplication import multiply
     
    def add_and_multiply(a,b):
        return multiply(a,b) + (a+b)
    
    print(add_and_multiply(1,2))

    現在の位置(add and multiply.py)とロードする関数を含むモジュールの位置が同じ線上にあるため、相対パスを設定するとエラーが発生する可能性があります.同じ線上にあるので、相対パスを設定せずに絶対パスを呼び出しても、ほぼ同じパスにロードできます.
    例えば、乗算前の点(.)絶対パスを1つ除いて、コール時に正常に動作していることを確認できます.
    # from .multiplication import multiply
    from multiplication import multiply
     
    def add_and_multiply(a,b):
        return multiply(a,b) + (a+b)
    
    print(add_and_multiply(1,2))

    以上の理由から、絶対パスで乗算モジュールを呼び出すと、計算パケットからアクセスする必要はなく、乗算から直接アクセスしてインポートするだけでよい.
    以下の計算機からアクセスを開始したときのコード実行結果を添付します.

    終了..。


      正直、モジュール&パッケージの概念、簡単な生成、導入の方法などがわかりやすいです.ただし、サンプルパッケージmainを作成します.pyファイルで他のモジュールを相対パスで実行中にエラーが発生した原因と,最後に確認した同一線上の他のモジュールの関数をインポート中にエラーが発生した原因について,かなり長い時間考えた.△正直に言うと、今でも私が理解していることが本当かどうか分かりません.後で正確でないと思ったら、文章を直す必要があるかもしれません.だから、この文章を見た人に参考にしてもらいたいです.
    本当に大変なブログ整理でしたしかし、これらの経験が蓄積されるにつれて、ジャンプ式の上昇の段階を迎えるに違いないと信じています.それはここまでです.