How import statement finds modules and packages

2583 ワード

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


sys.modules


パイソンがモジュールやpackageを見つけるために最初に確認した場所です.
sys.モジュールは、インポートしたモジュールとパッケージを格納する簡単な辞書です.
つまり、一度に導入したモジュールやパッケージには、Pythonを再検索する必要がない機能があります.
したがって,新しくインポートしたモジュールはsysである.モジュールに見つかりません.

sys.path


Pythonが最後に見た場所はsysパスです.
sys.pathは基本的にlistでありstring要素を持つlistである.
各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']
したがって、Pythonはlistの各パスをチェックし、インポートするパッケージがパスにあるかどうかを決定します.
ちなみにsysはPythonに含まれるモジュールです.したがって,sysモジュールを以下のようにインポートしてsysすることができる.モジュールとシステム.pathを出力したり、pathを変更したりすることができます.
import sys
print(sys.path)
print(sys.modules)
まとめると、Pythonがインポートするモジュールとパッケージを見つけたとき、まずsysです.モジュールを確認し、ない場合はPython内蔵モジュールを確認し、最後にsysです.パスで指定したパスをチェックして検索します.
sys.パスにも見つからない場合は、ModuleNotFoundErrorエラーを返します.

2.Pythonはsysモジュールをどのように位置決めするか。


Q)Pythonはsysモジュールを用いてモジュールとパッケージを検索する.
しかしsysもモジュールで、Pythonはどうやって探しますか?
内蔵モジュール
build-inモジュールとは、その名の通りPythonに内蔵されているモジュールです.
Pythonは2番目にモジュールを検索するステップで、内蔵モジュールをチェックします.Pythonに内蔵されている「sys」が見つかります.

3.Absolute pathと相対pathの違い


1.Absolute path(絶対パス)



絶対パスは、インポートしたファイルまたはパスにかかわらず、パスが常に同じであることを意味します.
上のmy appプロジェクトにはpackage 1、package 2があり、下にモジュールがあります.
万一モジュールpyにfunction 2関数を読み込むと
from package2.subpackage1.module5 import function2
Q)なぜmyアプリを書かないのですか?
上記のようなモジュールです.pyにアクセスする関数2のパスをLinuxディレクトリとして表します.以下に示します.
my_app/package2/subpackage1/module5.py
Pythonでfromimportキーワードを使用すると、my appプロジェクトから出発しているため、my appは珍しくありません.
整理する
my appプロジェクトでは、どのファイルからインポートしてもパスは常に上と同じなのでabsolute pathと呼ばれます.

2.関係パス(相対パス)


絶対パスとの最大の違いは「標準」です.
絶対パスと同様に、トップディレクトリに対するパスではありません.
importの位置に基づいてパスを定義します.
package 2のmodule 3からpackage 2のサブpackage 1のmodule 5の関数2をインポートすると、
from .subpackage1.module5 import function2
この点(.)import宣言ファイルの現在の場所です.