TIL 12 | Python modules, packages and path


import modules and packages


pythonでモジュールとパッケージをインポートすると、Pythonは順番に検索します.

sys.modules -> built-in modules -> sys.path

  • sys.modules
    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)>, (이하 생락) }
  • built-in modules
    これらはPythonが提供する公式ライブラリです.構築されたモジュールはすでにPythonに含まれており、簡単に見つけることができ、インストールする必要がなく使用できます.
  • sys.path
    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(...)を使用することもできます.は、現在の場所から親ディレクトリへのパスです.