Modules and Packages

2035 ワード

sys.modules vs. sys.path


Pythonモジュール/パッケージの検索順序
1. sys.mmodules
2. built-in modules
3. sys.path

sys.modules

  • Pythonがモジュールまたはパッケージを検索する際に最初にチェックする場所は
  • である.
  • dictionary
  • インポートされたモジュールとパッケージを格納->新しくインポートされたモジュールはsysです.モジュールには
  • が見つかりませんでした

    sys.path

  • Pythonモジュールまたはパッケージの検索時の最後のチェック:
  • (string要素付き)list
  • sysモジュールの場所の検索


    sysはPythonに含まれるモジュールであるため、sysモジュールをsysにインポートする.モジュールとシステム.pathを出力、変更できます
    import sys
    
    print(sys.path)
    print(sys.modules)

    Absolute Path vs. Relative Path


    Absolute path

  • 絶対パス
  • インポートされたファイルまたはパスが
  • であるかにかかわらず、パスは常に同じ
  • です.
  • パスの開始点は、プロジェクトの最上位ディレクトリにあり、
  • から開始します.
  • 経路が長くなる可能性のある欠点
  • Relative Path


    インポート先定義パス
  • ローカルパッケージに他のローカルパッケージをインポートする場合は
  • を使用します.
    ->通常は絶対パスを使用

    コンピュータパッケージ



    main.pyからadd and multiplyを相対パスにインポートするときに発生するエラーを確認します。メインモジュールがパッケージ内のモジュールをインポートする方法については、次のPython公式ドキュメントを参照してください。


    https://docs.python.org/3/tutorial/modules.html#intra-package-references

    ImportError: attempted relative import with no known parent package
    ->親から相対パスにインポートしようとしたときに発生したエラー
    解決策
    メインモジュールとして使用するモジュールは常に絶対インポートを使用します!!!
    from .calculator.add_and_multiply import add_and_multiply
    活動場所を表す
    from calculator.add and multiply import add and multiplyに変更して、次のエラーを解消します.

    add_and_multiply.pyに複数の関数の絶対パスと相対パスをそれぞれインポートし、メインモジュールとの違いを考慮して結果を出力します。


    相対パスにインポート中にエラー
    絶対パスを使用してメインモジュールをメインモジュールとして使用

    init.pyファイルの役割


    init.pyファイルにコードがなくても、ディレクトリがパッケージであることがわかります.