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宣言ファイルの現在の場所です.Reference
この問題について(How import statement finds modules and packages), 我々は、より多くの情報をここで見つけました https://velog.io/@qudans1237/How-import-statement-finds-modules-and-packagesテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol