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ファイルを整理する役割
ファイルパッケージを初期設定し、ファイルがファイルパッケージの一部であることを示すロールです.
Reference
この問題について(How Import Statement Finds Modules & Packages), 我々は、より多くの情報をここで見つけました https://velog.io/@14_seungchan/How-Import-Statement-Finds-Modules-Packagesテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol