[TIL_Python]Modules & Packages_2
1. sys.モジュールとシステム。パスの違いを述べてください。
sys.モジュールは辞書形式、sysです.pathはList形式です.
sys.ModulesはPythonが最初に経路を探した場所、sysです.パスは最後に見た場所です.
2.sysもインポートするモジュールです。Pythonはsysモジュールをどのように位置決めしますか?
sys.modules->built-in modules-> sys.パス順に見て探します.
3.Absolute pathと相対pathの違いを述べてください。
Absolute pathは、最上位ディレクトリツリーから開始してパスを延長できますが、pathに対してインポート位置に基づいて開始するため、パスの長さが減少します.
4.計算パッケージの作成
将来の開発では、大量のパッケージを使用して作成する必要がある場合があります.そのため、これは非常に困難なタスクです.
Pythonは、ローカル環境でインストールして実行してください.
ディレクトリ構造は次のとおりです.各ファイルのコード内容は次のとおりです.
__init__.py
ファイルには何のコードもありませんが、initファイルの役割はディレクトリがパッケージであることを知らせることです.main.py
# absoulte 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.py
from .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)
そうします.
5. main.pyからadd and multiplyを相対パスにインポートしたときに発生したエラーを確認します。
以下のPython公式ドキュメントを参照して、mainモジュールにパッケージ内のモジュールをインポートする方法を記録してください.
https://docs.python.org/3/tutorial/modules.html#intra-package-references
上のとおりにするpyを実行すると、次のエラーが発生します.
このエラーはmainです.pyファイルが最上位ファイルであることを教えてください.
アノテーションがパスに対して絶対パスとしてインポートされた場合、出力される結果は次のとおりです.
6. add_and_multiply.pyに複数の関数の絶対パスと相対パスをそれぞれインポートし、メインモジュールとの違いを考慮して結果を出力します。
相対パスにインポート時:エラー
絶対パスにインポートした場合:実行されます.
add_and_multiply.pyはコンピュータパッケージモジュール、mainです.pyはadd and multiplyです.pyモジュールの関数が実行されるモジュールを受け入れます.
7. init.pyファイルの役割も整理してブログを書いてください。
__init__
メソッドはclass実体化時に使用される関数です.__init__
メソッドは呼び出されていないが、クラス実体化時に自動的に呼び出される__init__
メソッド.__init__.py
ファイルには何のコードもありませんが、ディレクトリがパッケージであることを知らせる役割を果たしています.内部でのみ使用される関数がパッケージ外部からインポートされて使用されないように、
__all__
変数を指定できます.パッケージでインポートできる要素はすべて
__all__
変数で定義されています.__all__
変数のデフォルト値は、すべての関数/変数/クラスです.__all__
変数を個別に定義してインポート可能な要素を制限できます.__all__
変数はstring値要素を持つリストです.stringを使用してlistにインポートする要素を宣言します.
__init__.py
from .mod1 import func2
from .mod2 import func3
__all__ = ['func2', 'func3']
main.py
from pkg import *
func2()
func3()
func4() ## <== Error. func4 함수는 `__all__` 에 정의되지 않았으므로 import 될 수 없음.
Reference
この問題について([TIL_Python]Modules & Packages_2), 我々は、より多くの情報をここで見つけました https://velog.io/@hyeyoonc/TILPythonModules-Packages2テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol