Import Search


🎆 Import Search


Pythonは外部のpackageまたはmoduleを使用するためにインポートする必要があります.Pythonファイルをインポートするには、Pythonファイルまたはpackageディレクトリを見つける必要があります.
では、Pythonはどのようにモジュール/パッケージを見つけますか?
1~3の順に探す
  • sys. modules
  • built-in modules
  • sys.path
  • 🎈 sys.modules


    これは辞書で、すでに輸入されたモジュールとパッケージが格納されています.輸入されたモジュールとパッケージには、Pythonが再検索を必要としない機能があります.
    新しくインポートしたモジュールの場合sys.モジュールに見つかりません.

    🎈 built-in module


    Pythonが提供するライブラリを個別にインストールせずに使用できます.インポートするモジュールはsysです.モジュールにない場合は、2番目はbuit-inmoduleで検索します.
    Sysも内蔵モジュールで、早期にインポートできます.

    🎈 sys.path


    インポートするpackageアドレスをstringタイプのデータとして要素のlistとして格納します.インポートするモジュールはsysです.モジュールと組み込みモジュールにない場合sys.path要素にインポートするパケットにアドレスがあるかどうかを確認します.
    ['',
     '/Users/song-eun-u/anaconda3/bin',
     '/Users/song-eun-u/anaconda3/lib/python36.zip',
     '/Users/song-eun-u/anaconda3/lib/python3.6',
     '/Users/song-eun-u/anaconda3/lib/python3.6/lib-dynload',
     '/Users/song-eun-u/anaconda3/lib/python3.6/site-packages',
     '/Users/song-eun-u/anaconda3/lib/python3.6/site-packages/aeosa',
     '/Users/song-eun-u/anaconda3/lib/python3.6/site-packages/IPython/extensions',
     '/Users/song-eun-u/.ipython']
     

    🎇 Absolute path vs Relative path


    📌 Absolute path


    インポートするアドレスを示す場合は、ルートディレクトリからアドレスを入力してもインポートファイルの場所を入力しても、常に同じパスで表示できます.

    📌 Relative path


    インポートするモジュールの現在のディレクトリに対するアドレスを示します.
    └── my_app
        ├── main.py
        ├── package1
        │   ├── module1.py
        │   └── module2.py
        └── package2
            ├── __init__.py
            ├── module3.py
            ├── module4.py
            └── subpackage1
                └── module5.py
    🎯 absolute pathを使用したモジュール5のインポート
    from package2.subpackage1 import module5
    🎯 module 3の相対パスを使用してmodule 2をインポートする
    from ..package1 import module2
    
    🔍 absolute pathを使用すると、どこからインポートしてもパスは常に同じですが、パスが長くなる可能性があるという欠点があります.
    🔍 相対pathの欠点は、absolute pathよりもパスの長さが少ない可能性があるが、混同されやすく、ファイルの場所が変化した場合、作成したパスを変更する必要があることです.

    ✨ calculator package






    2つの数を加算した簡単なパッケージを作成しました.__init__.pyのキャラクターは?__init__.pyが属する場所がパッケージディレクトリとして機能しています.Python 3.3バージョンからinitを開始します.pyファイルがなくてもパッケージとして扱われます.
    サブバージョン互換性のために作成しましょう.
    🧨 main.py相対パスを使用してadd and multiplyをインポート中に発生したエラー

    🧵 Pythonがmoduleの場所を検索すると、nameの値を使用して相対パスが検索され、mainのimportはnameがmainであるため相対パスを検索する基準が取得されず、エラーが発生します.
    💡 mainmoduleからインポートするには、絶対パスを使用する必要があります.

    mainのimportをabsolute pathに変更すると、エラーなく正常に動作します.

    🧨 module add_and_multiply.pyをabsolute pathにインポート中に発生したエラー

    プライマリファイル実行、add and multiply.pyはコンピュータパッケージのサブモジュールとして登録されています.メインモジュールの絶対パスが登録され,他のモジュールは比較可能なルートとして機能する.
    したがってmainは絶対pahtを使用する必要があり,他のサブモジュールは相対パスメソッドを使用してモジュールをインポートする必要がある.