TIL 12 | Python modules, packages and path
import modules and packages
pythonでモジュールとパッケージをインポートすると、Pythonは順番に検索します.
sys.modules -> built-in modules -> sys.path
Dictionary構造はPythonがモジュールやパッケージを探すために最初に確認した場所です.インポートしたモジュールまたはパッケージを保存しています.
次は端末上のsysです.モジュールを実行する様子.
>>> sys.modules
{'sys': <module 'sys' (built-in)>, 'builtins': <module 'builtins' (built-in)>, '_frozen_importlib': <module '_frozen_importlib' (frozen)>, '_imp': <module '_imp' (built-in)>, (이하 생락) }
これらはPythonが提供する公式ライブラリです.構築されたモジュールはすでにPythonに含まれており、簡単に見つけることができ、インストールする必要がなく使用できます.
sys.pathはstring要素を持つListです.各string要素はパスを表します.Pythonはリストを1つずつチェックし、パスにインポートするパッケージがあるかどうかを決定します.
同様にsys.パスが動いている様子.
>>> sys.path
['', '/home/sehyeong/miniconda3/lib/python38.zip', '/home/sehyeong/miniconda3/lib/python3.8', '/home/sehyeong/miniconda3/lib/python3.8/lib-dynload', '/home/sehyeong/miniconda3/lib/python3.8/site-packages']
sys.pathでもモジュールまたはパッケージが見つからない場合は、ModuleNotFounderErrorを返します.sys.モジュールとシステム。pathの違い
まず見たのは2人の資料型.sys.モジュールはdictionary,sysです.pathはlistを返します.
出力値の長さを比較します.
>>> len(sys.modules)
38
>>> len(sys.path)
5
に等しいsys.モジュールはより多くのデータを返しています.原因はsysです.モジュールがインストールするモジュールとパッケージ、sys.pathはモジュールとパッケージがインストールされているディレクトリを出力します.sys
sys.モジュールまたはシステム.pathを出力すると、入力は直接出力されません.Sysもインポートする必要があります.
SysモジュールはまずPythonインタフェースに関する情報と機能を提供するモジュールである.インポート後に使用します.pyと同じファイルがあるかどうか考えています.sys.モジュール出力値から見ても、そうではありません.
>>> sys.modules
{'sys': <module 'sys' (built-in)>, ... }
出力値からbuild-inモジュールとbuild-inモジュールであることがわかります.SysはC言語でプログラミングされ、Pythonに内蔵されており、build-inモジュールからインポートされています!Absolute Path, Relative Path
モジュールまたはパッケージをインポートする場合は、パスを記録する必要があります.
たとえば、次のファイルがあります.
my appというプロジェクトは、複数のパッケージとモジュールで構成されています.
module4.pyを取るとき
from package1 import module4
サブパッケージ1ディレクトリのmodule 5.pyをインポートすると、from package2.subpackage1 import module5
に示すように入力する必要があります.この経路をAbosultPath,絶対経路と呼ぶ.my appプロジェクトでは、どのファイル、どの場所からインポートしてもパスは常に上と同じなのでabsolute pathと呼ばれます.Relative Pathは、現在のディレクトリに対して入力されたパスであり、絶対パスよりも簡単に書くことができますが、現在の位置に基づいてパス値を変更し続ける必要があるため、絶対パスを使用することを推奨します.
関係パスは次のとおりです.
package 2のmodule 3で、package 2のclass 1とpackage 2のサブpackage 1のmodule 5の関数2をインポートする場合は、次の操作を行います.
# package2/module3.py
from . import class1
from .subpackage1.module5 import function2
この点(.)import宣言ファイルの現在の場所です.現在の位置はpackage 2/module 3です.したがって、必要なモジュールのパスを現在の位置から宣言するだけでよい.2つのdot、2つのdot(...)を使用することもできます.は、現在の場所から親ディレクトリへのパスです.Reference
この問題について(TIL 12 | Python modules, packages and path), 我々は、より多くの情報をここで見つけました https://velog.io/@sehy/python-s0ul1zviテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol