How Import Statement Finds Modules & Packages


Import Searchシーケンス


1. sys.modules


モジュールまたはパッケージの最初のサイトを探しています!
sys.モジュールは簡単なディックシリーズから構成されています.
インポートしたモジュールとパッケージを保存
また,モジュールやパッケージを導入するとPythonは二度と見つからない.
新しいimportモジュールが見つかりません

2. built-in modules


Pythonが提供するPython公式ライブラリ.
Buit-inモジュールはすでに配線に含まれており、見つけにくい

3. sys.path


sys.デフォルトではpathにはlistまたはstring要素があります
各string要素
['',
 '/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']
リスト内の各パスを確認し、パスにインポートするパッケージがその場所にあることを確認します.
デフォルトではsysがPythonに含まれるモジュール

インポートするモジュールとパッケージが見つかったら、まずsysを使用します。モジュールを表示し、組み込みモジュールを確認します。最後にsysです。pathは順番に検索する必要があります


*sys.パスにも見つからない場合はModuleNotFoundErrorエラーを返します

Absolute Path & Relative Path


Absolute Path


≪絶対パス|Absolute Path|oem_src≫:インポートされたファイルまたはパスにかかわらず、パスは常に同じです.
プロジェクトの例
└── my_app
    ├── main.py
    ├── package1
    │   ├── module1.py
    │   └── module2.py
    └── package2
        ├── __init__.py
        ├── module3.py
        ├── module4.py
        └── subpackage1
            └── module5.py
項目:my app
パッケージ1とパッケージ2.パッケージ2は、ネストされたパッケージであるサブパッケージを有する.
importの例(Absolute Pathを使用)
from package1 import module1
from package1.module2 import function1
from package2 import class1
from package2.subpackage1.module5 import function2
最上位ディレクトリでの使用
my appプロジェクトでは、どのファイルからインポートしてもパスが常に同じためabsolute pathと呼ばれます.
ローカルパッケージをインポートする場合はabsolute pathを使用できますが、パスが欠点まで延長される場合があります.
これを補う相対パスは、プロジェクトの最上位ディレクトリではなく、インポートされた場所に基づいてパスを定義する絶対パスとは異なります.
通常、ローカルパッケージに他のローカルパッケージをインポートするときに相対パスが使用されます.
ex)
# package2/module3.py

from . import class1
from .subpackage1.module5 import function2
パッケージ2のモジュール3では、例に示すように、パッケージ2のclas 1とパッケージ2のサブパッケージ1のモジュール5の関数2を導入しようとする.
相対パスの利点は、パスの長さを減らすことですが、混同しやすいという欠点があります.また、ファイルの場所が変更されると、パスの場所も変更する必要があります.

sys.モジュールとシステム。pathの違い


sys.ModulesはPythonでモジュールやパッケージを最初に検索するスペースです.また、importedモジュールとともにパッケージを保存するディック構造であり、この場合、Pythonで再配置する必要がなく使用できます.
sys.pathの場合は、モジュールとパッケージを検索し、最後にsysを検索します.パスに移動します.また、sysの場合、最初の要素から最後の要素までリスト形式で存在します.pathセクションでも見つからない場合は、ModuleNotFoundErrorエラーを返します.

Sysもインポートするモジュールですが、Pythonはどのようにsysモジュールの位置を見つけますか?


sysモジュールは内蔵されているので、内蔵モジュールがある部分で見つけることができます.

Absolute pathと相対pathの違い


Absolute path:インポートされたファイルまたはパスにかかわらず、パスは常に同じです.
相対パス:絶対パスとは異なり、パス定義はプロジェクトベースの最上位ディレクトリではなくインポート位置に基づいています.

Calculatorモジュールのインポート時に発生したエラーを確認して修正


親ディレクトリを絶対パスに変更するには

init.pyファイルを整理する役割


ファイルパッケージを初期設定し、ファイルがファイルパッケージの一部であることを示すロールです.