[python]モジュール/パッケージ
モジュール:Pythonファイル作成後に再利用したいクラス、関数、変数などを実現
パッケージ:Pythonファイルと呼ばれるモジュールを1つのディレクトリ(ディレクトリ)に配置
pkgディレクトリのfile.pyでadd関数を実行するプロセス.hello.pyからadd関数を呼び出す場合は、を呼び出すことができます.
importとaddのパッケージ名とファイルパスを作成する必要があります.
作成パスを簡略化するために、initファイルをpkgディレクトリ(パッケージ)に挿入して、パッケージインポート時に自動的に実行されるコードを作成し、コードを簡略化できます.
Pythonは、次の3つの場所を順に検索します.
sys.modules
built-in modules
sys.path
sys.モジュールとシステム.パスの違いを述べてください.
sys.モジュールは簡単な辞書です.sys.modulesは、インポートしたモジュールとパッケージを格納します.
sys.pathはstring要素を持つlistです.List要素には、Pythonからインポートしたい場合にsysというパスがあります.まずモジュールで検索し、build-inmodulesの後にsysです.パスリストで最後の1つを検索します.
Sysもインポートするモジュールです.Pythonはsysモジュールをどのように位置決めしますか?
Sysは内蔵モジュールに含まれています.sys.モジュールを出力すると、ディックシリーズの最初の要素の内蔵モジュールにシステムが含まれていることがわかります.
Absolute pathと相対pathの違いを述べてください.
absolute pathは、現在のディレクトリからパスを作成します.現在のプロジェクトディレクトリはdefault losysです.pathに含まれます.したがって、インポート時に現在のプロジェクトディレクトリからパスを開始できます.この場合、ブレークポイントはプロジェクトディレクトリから始まり、パスが長くなる可能性があります.
ここからmodule 5をインポートする場合は from package2.subpackage1 import module5 相対パスimportを宣言するファイルのディレクトリの場所にパスを作成します.から.現在のファイルを表す場所を作成...現在のファイルの親ディレクトリをパスとして指定します.
module 3からmodule 4をインポートするには from . import module4 module 3からmodule 2をインポートするには from .. package1 import module2 計算パッケージの作成
main.py
mainモジュールから他のパッケージのモジュールをインポートするには、絶対パスとして指定する必要があります.
mainモジュールが上記のコードの相対パスで実行されている場合、次のエラーが発生します.
'Attempted relative import beyond top-level package'
mainモジュールの名前は常に「main」です.ここから始まるpyとmainモジュールは異なるので、メインモジュールはAbsolute pathを使用してパッケージ内のモジュールをインポートする必要があります.上のコードのfrom calculator.add and multiply import add and multiplyを使用して実行します.非mainモジュールで相対パスを指定すると、この操作を実行するよう求められます.
add_and_multiply.pyで、乗数を相対パス、絶対パスとして指定します.
mainと同様に、パッケージ内のモジュールを実行するときに相対パスにインポートすると、エラーがポップアップされます.
"ImportError: attempted relative import with no known parent package"
相対パスにインポートする必要がありますが、親パッケージの名前はわかりません.つまり、「パッケージ内でこのファイルを実行するときにインポートする場合は、親パッケージ名(絶対パス)を教えてください」ということです.
add_and_multiply.pyは計算機パッケージのモジュールです.mainのように直接実行されるファイルではないので、実行する場合は、絶対パスとして別のパッケージまたは同じパッケージに存在する場合でも、親パッケージの名前を宣言する必要があります.逆にmain上でパッケージ内のモジュールを実行して使用する場合は、相対パスとして指定できます.
Pythonファイルを実行する場合、importは絶対パスとして指定する必要があります. パケット内モジュール間のimportは、相対パスを使用することができる.
パッケージ:Pythonファイルと呼ばれるモジュールを1つのディレクトリ(ディレクトリ)に配置
__init__.py
pkgディレクトリのfile.pyでadd関数を実行するプロセス.hello.pyからadd関数を呼び出す場合は、を呼び出すことができます.
importとaddのパッケージ名とファイルパスを作成する必要があります.
作成パスを簡略化するために、initファイルをpkgディレクトリ(パッケージ)に挿入して、パッケージインポート時に自動的に実行されるコードを作成し、コードを簡略化できます.
importシーケンス
Pythonは、次の3つの場所を順に検索します.
sys.modules
built-in modules
sys.path
sys.モジュールは簡単な辞書です.sys.modulesは、インポートしたモジュールとパッケージを格納します.
sys.pathはstring要素を持つlistです.List要素には、Pythonからインポートしたい場合にsysというパスがあります.まずモジュールで検索し、build-inmodulesの後にsysです.パスリストで最後の1つを検索します.
Sysもインポートするモジュールです.Pythonはsysモジュールをどのように位置決めしますか?
Sysは内蔵モジュールに含まれています.sys.モジュールを出力すると、ディックシリーズの最初の要素の内蔵モジュールにシステムが含まれていることがわかります.
Absolute/relative path
Absolute pathと相対pathの違いを述べてください.
absolute pathは、現在のディレクトリからパスを作成します.現在のプロジェクトディレクトリはdefault losysです.pathに含まれます.したがって、インポート時に現在のプロジェクトディレクトリからパスを開始できます.この場合、ブレークポイントはプロジェクトディレクトリから始まり、パスが長くなる可能性があります.
ここからmodule 5をインポートする場合は
module 3からmodule 4をインポートするには
main.py
# absolute path
# from calculator.add_and_multiply import add_and_multiply
# relative path
from .calculator.add_and_multiply import add_and_multiply
if __name__ == '__main__':
print(add_and_multiply(1,2))
add_and_multiply.pyfrom .multiplication import multiply
# from calculator.multiplication import multiply
def add_and_multiply(a,b):
return multiply(a,b) + (a+b)
multiplication.pydef multiply(a,b):
return(a*b)
mainモジュールからのパスのインポート
mainモジュールから他のパッケージのモジュールをインポートするには、絶対パスとして指定する必要があります.
mainモジュールが上記のコードの相対パスで実行されている場合、次のエラーが発生します.
'Attempted relative import beyond top-level package'
mainモジュールの名前は常に「main」です.ここから始まるpyとmainモジュールは異なるので、メインモジュールはAbsolute pathを使用してパッケージ内のモジュールをインポートする必要があります.上のコードのfrom calculator.add and multiply import add and multiplyを使用して実行します.非mainモジュールで相対パスを指定すると、この操作を実行するよう求められます.
パッケージモジュールをスクリプトとして実行する場合
add_and_multiply.pyで、乗数を相対パス、絶対パスとして指定します.
mainと同様に、パッケージ内のモジュールを実行するときに相対パスにインポートすると、エラーがポップアップされます.
"ImportError: attempted relative import with no known parent package"
相対パスにインポートする必要がありますが、親パッケージの名前はわかりません.つまり、「パッケージ内でこのファイルを実行するときにインポートする場合は、親パッケージ名(絶対パス)を教えてください」ということです.
add_and_multiply.pyは計算機パッケージのモジュールです.mainのように直接実行されるファイルではないので、実行する場合は、絶対パスとして別のパッケージまたは同じパッケージに存在する場合でも、親パッケージの名前を宣言する必要があります.逆にmain上でパッケージ内のモジュールを実行して使用する場合は、相対パスとして指定できます.
n/a.結論
Reference
この問題について([python]モジュール/パッケージ), 我々は、より多くの情報をここで見つけました https://velog.io/@tonic523/python-모듈패키지テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol