[Python] Modules & Packages
Pythonでコードの再利用性を向上させるモジュールとパッケージについて説明します
また、moduleがどのようにインポートされたかについて説明します.モジュール:変数、関数、クラスを含むファイル パッケージ:複数のモジュールを含むディレクトリ モジュール/パッケージをインポートするには、Pythonがそのモジュール/パッケージのディレクトリを知っている必要があります.
このとき、Pythonは以下のような手順で3箇所を調べ、Module/Packageを検索します.
参考資料:https://docs.python.org/3/reference/import.html#the-meta-path
1. sys.modules
2. built-in
3. sys.path
ここ
最初にモジュールを検索した場所
出力
build-inモジュールはPythonのインストール時にデフォルトで保存されるモジュールです.
build-inモジュールの例は
また,
これらのモジュールはいずれもC言語で記述されており,Pythonフォルダにはそれぞれ
最後に、モジュールを探す場所
sys.pathは、scriptを実行するディレクトリを最初に追加し、
(参考資料):https://docs.python.org/3/tutorial/modules.html#the-module-search-path
また、moduleがどのようにインポートされたかについて説明します.
このとき、Pythonは以下のような手順で3箇所を調べ、Module/Packageを検索します.
参考資料:https://docs.python.org/3/reference/import.html#the-meta-path
1. sys.modules
2. built-in
3. sys.path
ここ
sys
もモジュールで、Pythonのbuild-inモジュールです.sys.modules
最初にモジュールを検索した場所
sys.modules
は、Pythonの実行後にインポートされたすべてのモジュールを含む辞書です.keyはモジュールの名前であり、valueはモジュールオブジェクトを格納します.出力
sys.modules
は、sys, builtins
などのモジュールがdict形式で格納されていることがわかります.>>> import sys
>>> print(sys.modules.keys())
dict_keys(['sys', 'builtins', '_frozen_importlib', '_imp', '_warnings', '_frozen_importlib_external', '_io', 'marshal', 'posix', '_thread', '_weakref', 'time', 'zipimport', '_codecs', 'codecs', 'encodings.aliases', 'encodings', 'encodings.utf_8', '_signal', '__main__', 'encodings.latin_1', '_abc', 'abc', 'io', '_stat', 'stat', '_collections_abc', 'genericpath', 'posixpath', 'os.path', 'os', '_sitebuiltins', '_locale', '_bootlocale', 'types', 'importlib._bootstrap', 'importlib._bootstrap_external', 'warnings', 'importlib', 'importlib.machinery', 'importlib.abc', '_operator', 'operator', 'keyword', '_heapq', 'heapq', 'itertools', 'reprlib', '_collections', 'collections', '_functools', 'functools', 'contextlib', 'importlib.util', 'mpl_toolkits', 'sphinxcontrib', 'zope', 'site', 'readline', 'atexit', 'rlcompleter'])
>>> print(sys.modules['sys'])
<module 'sys' (built-in)>
>>> print(sys.modules['builtins'])
<module 'builtins' (built-in)>
built-in
build-inモジュールはPythonのインストール時にデフォルトで保存されるモジュールです.
build-inモジュールの例は
sys, builtins
などである.sys
モジュールにはsys.modules
などの辞書、sys.path
などのリストが内蔵されています.また,
builtins
モジュールにはsum, divmod
等の関数やtuple, dict
等の資料型が内蔵されている.これらのモジュールはいずれもC言語で記述されており,Pythonフォルダにはそれぞれ
sysmodule.c, bltinmodule.c
の名前で格納されている.sys.path
最後に、モジュールを探す場所
sys.path
は、モジュールの位置を含むパス文字列のlistである.sys.pathは、scriptを実行するディレクトリを最初に追加し、
PYTHONPATH
と関連default site-packages
のインストールパスを追加します.(参考資料):https://docs.python.org/3/tutorial/modules.html#the-module-search-path
'/Users/dongmyeong/projects/wecode/precourse/module-test'
フォルダにあるmain.pyを実行した結果# main.py
>>> import sys
>>> print(sys.path)
['/Users/dongmyeong/projects/wecode/precourse/module-test', '/Users/dongmyeong/projects/wecode/precourse/module-test', '/Applications/PyCharm.app/Contents/plugins/python/helpers/pycharm_display', '/Library/Frameworks/Python.framework/Versions/3.8/lib/python38.zip', '/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8', '/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/lib-dynload', '/Users/dongmyeong/Library/Python/3.8/lib/python/site-packages', '/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages', '/Applications/PyCharm.app/Contents/plugins/python/helpers/pycharm_matplotlib_backend']
Reference
この問題について([Python] Modules & Packages), 我々は、より多くの情報をここで見つけました https://velog.io/@dom9316/Python-Modules-Packagesテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol