[python]モジュール/パッケージ


モジュール:Pythonファイル作成後に再利用したいクラス、関数、変数などを実現
パッケージ:Pythonファイルと呼ばれるモジュールを1つのディレクトリ(ディレクトリ)に配置

__init__.py


pkgディレクトリのfile.pyでadd関数を実行するプロセス.hello.pyからadd関数を呼び出す場合は、を呼び出すことができます.
importとaddのパッケージ名とファイルパスを作成する必要があります.
作成パスを簡略化するために、initファイルをpkgディレクトリ(パッケージ)に挿入して、パッケージインポート時に自動的に実行されるコードを作成し、コードを簡略化できます.

importシーケンス


Pythonは、次の3つの場所を順に検索します.

  • sys.modules

  • built-in modules

  • sys.path
  • sys.モジュールとシステム.パスの違いを述べてください.
    sys.モジュールは簡単な辞書です.sys.modulesは、インポートしたモジュールとパッケージを格納します.
    sys.pathはstring要素を持つlistです.List要素には、Pythonからインポートしたい場合にsysというパスがあります.まずモジュールで検索し、build-inmodulesの後にsysです.パスリストで最後の1つを検索します.
    Sysもインポートするモジュールです.Pythonはsysモジュールをどのように位置決めしますか?
    Sysは内蔵モジュールに含まれています.sys.モジュールを出力すると、ディックシリーズの最初の要素の内蔵モジュールにシステムが含まれていることがわかります.

    Absolute/relative path


    Absolute pathと相対pathの違いを述べてください.
    absolute pathは、現在のディレクトリからパスを作成します.現在のプロジェクトディレクトリはdefault losysです.pathに含まれます.したがって、インポート時に現在のプロジェクトディレクトリからパスを開始できます.この場合、ブレークポイントはプロジェクトディレクトリから始まり、パスが長くなる可能性があります.

    ここからmodule 5をインポートする場合は
  • from package2.subpackage1 import module5
  • 相対パスimportを宣言するファイルのディレクトリの場所にパスを作成します.から.現在のファイルを表す場所を作成...現在のファイルの親ディレクトリをパスとして指定します.
    module 3からmodule 4をインポートするには
  • from . import module4
  • module 3からmodule 2をインポートするには
  • from .. package1 import module2
  • 計算パッケージの作成

    main.py
    # absolute 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)

    mainモジュールからのパスのインポート


    mainモジュールから他のパッケージのモジュールをインポートするには、絶対パスとして指定する必要があります.
    mainモジュールが上記のコードの相対パスで実行されている場合、次のエラーが発生します.
    'Attempted relative import beyond top-level package'
    mainモジュールの名前は常に「main」です.ここから始まるpyとmainモジュールは異なるので、メインモジュールはAbsolute pathを使用してパッケージ内のモジュールをインポートする必要があります.上のコードのfrom calculator.add and multiply import add and multiplyを使用して実行します.非mainモジュールで相対パスを指定すると、この操作を実行するよう求められます.

    パッケージモジュールをスクリプトとして実行する場合


    add_and_multiply.pyで、乗数を相対パス、絶対パスとして指定します.
    mainと同様に、パッケージ内のモジュールを実行するときに相対パスにインポートすると、エラーがポップアップされます.
    "ImportError: attempted relative import with no known parent package"
    相対パスにインポートする必要がありますが、親パッケージの名前はわかりません.つまり、「パッケージ内でこのファイルを実行するときにインポートする場合は、親パッケージ名(絶対パス)を教えてください」ということです.
    add_and_multiply.pyは計算機パッケージのモジュールです.mainのように直接実行されるファイルではないので、実行する場合は、絶対パスとして別のパッケージまたは同じパッケージに存在する場合でも、親パッケージの名前を宣言する必要があります.逆にmain上でパッケージ内のモジュールを実行して使用する場合は、相対パスとして指定できます.

    n/a.結論

  • Pythonファイルを実行する場合、importは絶対パスとして指定する必要があります.
  • パケット内モジュール間のimportは、相対パスを使用することができる.