python - How Import Statement Finds Modules & Packages

8080 ワード

1. sys.モジュールとシステム。パスの違いを述べてください。


sys.modules


sys.モジュールはPythonがモジュールやパッケージを探すために最初に探した場所で、ディック社から構成され管理されています.

sys.path


sys.pathはPython検索モジュールまたはパッケージの最後の場所であり、インポートモジュールのパスをstringの値としてlist(配列)に格納して管理します.

2.sysもインポートするモジュールです。Pythonはsysモジュールをどのように位置決めしますか?


SysモジュールはPython build inモジュールに含まれるモジュールであるためsys.モジュールまたはシステム.pathで位置を見つけることができます.

3.Absolute pathと相対pathの違いを述べてください。


絶対パス(絶対パス)


インポートしたファイルまたはパスにかかわらず、パスは常に同じです.
通常、独自に開発したlocal packageをインポートする場合、absolute pathを使用するパスが長い場合があります.
現在のディレクトリ(現在のディレクトリ)のデフォルトはsysです.pathに含まれているため、absolute pathは現在のディレクトリ(最上位)からパスを開始します.
from package.subpackage.module import function 
#파이썬은 dot(.)을 사용해 경로 표현

相対パス(相対パス)


-インポートパスの場所に基づいて定義します(absoluteのように上位ディレクトリに基づいてパスを決定するわけではありません)
-dot(.); importのファイルの現在位置を宣言
-two dots(..); 現在の場所から親ディレクトリへのパス
-絶対パスが長い可能性のある欠点を補うために使用できる
-ファイルの場所が変更された場合、パスの場所も変更する必要があります.
-絶対パスの使用を推奨
-通常、ローカルパッケージに他のローカルパッケージをインポートする場合に使用します.
#해당 디렉토리에서 찾기
from .import class1      
from .subpackage1.module1 import function1 
#여기서 dot(.)은 import가 선언되는 파일의 현재 위치
#현재 위치에서부터 원하는 모듈의 경로만 선언 해주면 됨

#상위 디렉토리로 올라가서 찾기
from ..module4 import class4
  #dot(.) 2개를 사용할 수 있음
  #2개는 현재위치에서 상위 디렉토리로 가는 경로

4.計算パッケージの作成



main.py
# Absolute Path (실행 진행)
from calculator.add_and_multiply import add_and_multiply
#Relative Path (실행 오류) 
#ImportError: attempted relative import with no known parent package)

#.from calculator.add_and_multiply import add_and_multiply

if __name__ == '__main__':
    print(add_and_multiply(1,2))
main.pyの実行
add and multiplyをメインモジュールにインポートする際の絶対パスの使用
add and multiplyから乗算をインポートする場合、絶対パスと相対パスを使用できます.
add and multiplyの実行
乗算のインポート時に計算機を含めるエラー
モジュールのみを認識し、以下に示す
add_and_multiply.py
from multiplication import multiply
def add_and_multiply(a,b):
    return multiply(a,b) + (a+b)
print(add_and_multiply(1,2))

5. main.pyからadd and multiplyを相対パスにインポートするときに発生するエラーを確認し、次のPython式ドキュメントを参照して、メインモジュールがパッケージ内のモジュールをどのようにインポートすべきかを理解します。


( https://docs.python.org/3/tutorial/modules.html#intra-package-references )

main.pyからadd and multiplyを相対パスにインポートしたときに発生したエラーを確認します


上記のコードを実行すると、次のエラーが発生します.

これは、親パケットが定義されていない場合に相対パスを使用してインポートしようとしたためのimportエラーです.

main moduleはパッケージのモジュールをどのようにインポートしますか。


-絶対パスを使用してimportパスを定義します.
-Pythonの公式文書を参照してください.
Note that relative imports are based on the name of the current module. Since the name of the main module is always "main", modules intended for use as the main module of a Python application must always use absolute imports.
すなわち、相対パスimportは、現在のモジュールの名前に基づいている.デフォルトモジュールの名前は常にmainなので、Pythonアプリケーションのデフォルトモジュールとして使用するモジュールは常に絶対インポートを使用する必要があります.次に、上記の内容を参照して、エラーを解決し、結果を出力するために絶対パスに変更してください.
エラーの除外

出力結果

6. add_and_multiply.pyに複数の関数の絶対パスと相対パスをそれぞれインポートし、メインモジュールとの違いを考慮して結果を出力します。


add_and_multiply.pyに複数の関数の絶対パスと相対パスをそれぞれインポート


•絶対パス
from calculator.multiplication import multiply
def add_and_multiply(a,b):
   return multiply(a,b) + (a+b)
•相対パス
from .multiplication import multiply
def add_and_multiply(a,b):
    return multiply(a,b) + (a+b)
•実行結果

実行結果は同じです.

思考と出力とmainモジュールの違い


add_and_multiply.pyはmainpyではないので、絶対パスでも相対パスでも正常に動作します.main.pyでない場合は、絶対パスでも相対パスでも操作に問題はありません.

7. init.pyファイルの役割


-init.pyファイルが存在しない場合は、パッケージの一部であるかどうかを認識できないため、プロパティがありません.
-今はinitです.pyファイルは空のファイルですが、パッケージを実行するときに設定したい初期設定がある場合は、このファイルに初期設定に関連するコードを記述できます.これにより、パッケージの実行時に作成されたコードの内容が自動的に実行されます.