Modules & packages

3189 ワード

1. sys.モジュールとシステム。パスの違いを述べてください。


  • sys.modules:Pythonはモジュールやパッケージの最初のサイトを検索し、簡単な辞書です.また、インポートしたモジュールとパッケージを格納しています.
  • のモジュールとパッケージは、Pythonが再検索する必要がないことを保証します.
    したがって,新しくインポートしたモジュールはsysである.モジュールに見つかりません.

  • sys.path:Pythonが最後に表示した場所で、デフォルトではstring要素を含むlistです.
    各string要素にはパスがあり、Pythonはリスト内の各パスを1つずつチェックし、インポートするパッケージがパスにあることを確認します.
    インポートするモジュールとパッケージが見つかった場合、Pythonはまずsysを使用します.モジュールを確認し、ない場合はPython内蔵モジュールを検証し、最後にsysです.pathで指定したパスを確認します.
    sys.パスにも見つからない場合は、ModuleNotFoundErrorエラーを返します.
  • 2.sysもインポートするモジュールです。Pythonはsysモジュールをどのように位置決めしますか?


  • パスを確認し、使用するパッケージがパスに含まれていることを確認します.
    sysモジュールsysをインポートします.モジュールとシステム.pathを出力または変更できます.
  • import sys
    
    print(sys.path)
    print(sys.modules)

    3.Absolute pathと相対pathの違いを述べてください。


  • 独自に開発したローカルパッケージにインポートパスを適用する場合は、パッケージの場所と一致するようにインポートパスを宣言する必要があります.
    local packageをインポートするパスはabsolute pathとrelative pathです.

  • Absolute pathは絶対パスです.インポートしたファイルまたはパスにかかわらず、パスは常に同じです.
  • └── my_app
        ├── main.py
        ├── package1
        │   ├── module1.py
        │   └── module2.py
        └── package2
            ├── __init__.py
            ├── module3.py
            ├── module4.py
            └── subpackage1
                └── module5.py
  • このようなプロジェクトがある場合、プロジェクト名はmy appで、package 1とpackage 2の2つのパッケージがあります.
    package 2はsubpackage 2というネストされたpackageを有する.
  • Absolute pathを使用してパッケージ1とパッケージ2をインポートします.
  • from package1 import module1
    from package1.module2 import function1
    from package2 import class1
    from package2.subpackage1.module5 import function2
    すべてのパスの開始点は、my appプロジェクトの最上位ディレクトリから始まります.my appプロジェクトでは、どのファイル、どの場所からインポートしてもパスは常に同じであるため、絶対パスと呼ばれます.
  • の1つの欠点は、経路が長い可能性があることである.
  • これらの欠点を補うために相対パスを使用する

  • 相対パスは、絶対パスとは異なり、プロジェクトの最上位レベルのディレクトリではなく、インポートされた場所に基づいて定義されます.したがって、通常、ローカルパケットに他のローカルパケットをインポートする際に相対パスが使用されます.

  • たとえば、package 2のmodule 3からpackage 2のクラス1とpackage 2の子饅頭package 1のmodule 5の関数2をインポートしようとすると、次のことができます.
  • # package2/module3.py
    
    from . import class1
    from .subpackage1.module5 import function2
    
    여기서 dot(.)은 import가 선언되는 파일의 현재 위치를 이야기 합니다. 현재위치는 package2/module3.py 이므로 현재 위치에서부터 원하는 모듈의 경로만 선언해주면 되는 것입니다.
    
    또한 dot 2개를 사용할 수도 있습니다.  dot 2개(..) 는 현재위치에서 상위 디렉토리로 가는 경로입니다.
    
    # subpackage1/module5.py
    from ..module4 import class4
    
    Relative path는 선언해야 하는 경로의 길이를 줄여준다는 장점은 있지만 헷갈리기 쉽고 파일 위치가 변경되면 경로 위치도 변경되어야 하는 단점이 있습니다. 그러므로 웬만한 경우 absolute path를 사용하는게 권장 됩니다.
    
  • 計算機パッケージ
  • を作成
  • main.pyからadd and multiplyを相対パスにインポートしたときに発生したエラーを確認します.
    以下のPython公式ドキュメントを参照して、mainモジュールにパッケージ内のモジュールをインポートする方法を記録してください.
  • エラーコード:不明な親パッケージ
  • を使用して相対インポートを試みます
    importエラーは、親パッケージがないことを示します.

    パターン図から見ると、calculatorとmainは同じフォルダにあります.だから親フォルダに行っても見つからない!!
  • 相対パスは、現在のモジュールに基づいて検索され、メインモジュールは常にmainであるため、メインターゲットのメインモジュールは絶対パスを使用する必要があります.
  • Initファイルの逆アクティブ
    Initファイルがなくても、それ自体がパッケージの開始点を意味します.
  • initファイルにコードを追加することで管理することもできます.